7

私はこのフォーラムにかなり慣れていないので、メンバーになる前から解決策を提供してくれたことにまず感謝したいと思います :)。

だから私はこのコードを持っています:

for %%a in ("%PBpath%") do ( 
move "network location 1 files" "network location 2" >NUL
if ERRORLEVEL 0 (echo Diagram %%~na.pdf was successfuly archived) else ( echo            Diagram %%~na.pdf was not archived )
ECHO.%errorlevel%
          )

問題は、0 以外のエラーレベルを取得できないことです。コピーするファイルが場所から欠落している場合でも、正常にアーカイブされたというメッセージがエコーされます。フォーラムで同様の質問を検索しましたが、何らかの理由で機能しませんでした。コピーと移動のどちらでも取得できないため、コピーと ping コマンド (ping コマンドはエラーレベルで正しい終了コードを返します) の間に何か違いがありますか?

ありがとう!アンドリュー

4

3 に答える 3

7

IF ERRORLEVELステートメントの奇妙な点は、期待どおりに動作しないことです。エラーレベルが指定された数値以上の場合に TRUE を返します。MOVE でエラーが発生すると、errorlevel が 1 に設定されます (チェックしたばかりです)。これは 0 より大きいためです。したがって、IF ステートメントの最初の句が常に使用されます。スクリプトを修正する最も簡単な方法は、IF ステートメントの条件を逆にすることです。

if ERRORLEVEL 1 (echo file was not archived) else (echo file was successfully archived)
于 2013-10-03T20:56:59.210 に答える
3

関数%ERRORLEVEL%の代わりに変数を使用するだけですERRORLEVEL

于 2013-10-03T21:37:00.950 に答える
0

ERRORLEVELこの関数を使用したい場合は、 Superbob の 回答アドレス ' this (ただし、if NOT ERRORLEVEL 1 (echo file was successfully archived) else (echo file was not archived)代わりにフォームをお勧めします)。

ただし、代わりに %ERRORLEVEL% 変数メソッドを使用する場合は、Delayed Expansionオンにする必要があります。上記の OP のコードと、推奨される変更を以下に示します。

setlocal enabledelayedexpansion

for %%a in ("%PBpath%") do (
  move "network location 1 files" "network location 2" >NUL
  if !ERRORLEVEL! equ 0 (
    echo Diagram %%~na.pdf was successfully archived
  ) else (
    echo Diagram %%~na.pdf was not archived)
)
于 2016-05-02T18:31:53.357 に答える