バッチファイルの最後のコマンドの終了コードを確認するにはどうすればよいですか?


69

Windowsのバッチファイル内では、次のように7-zipを使用します。

...\right_path\7z a output_file_name.zip file_to_be_compressed

の終了コードを確認し7zて適切なアクションを実行するにはどうすればよいですか?


回答:


78

1以上の戻りコードをテストします。

if ERRORLEVEL 1 echo Error

または

if %ERRORLEVEL% GEQ 1 echo Error

または、0に等しいリターンコードをテストします。

if %ERRORLEVEL% EQU 0 echo OK

GOTOここに示すような他のコマンドを使用できますecho


あなたのコードを試しました。私は、次のエラーを得た:0 was unexpected this time.
ミーシャMoroshko

2
@Misha:私が最初に投稿したように、パーセント記号で試してみたかもしれません。それらなしで試してみるか、追加した他のバージョンを試してください。
デニスウィリアムソン

2
%ERRORLEVEL%エラーが発生しても0であるケースが見つかりました。%ERRORLEVEL%cmdファイルをチェックインするときに発生しました。試してstart /waitもうまくいきませんでした。働いていた唯一の事はあるif errorlevel 1 (...)
AlikElzin-kilaka

4
errorlevelは環境変数でないことに注意してください。落とし穴と微妙さの良い要約を以下に示します。
ニックウェストゲート

負の戻りコードの検出をサポートするNEQ代わりに使用することをお勧めしEQUますか?Windows XPがそれを行うかどうかは
わかり

10

これは本当にある場合に機能します:App1.exe呼び出し-> .bat実行-> app2.exe

App2はerrorlevel 1 ...を返しますが、.batでそれをキャッチし、app1に再レイズする必要があります。

方法:

.batの場合:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

これは、app2の後のerrorlevelのチェックです。> 0の場合、.batは終了し、呼び出し元のapp1のerrorlevelを1に設定します。


4
同じエラーをapp1に返した場合はさらに改善される可能性があります。私はこれを試していなかったが、それは動作するはずです: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%
ヴィクトル・フォニック14

2
少なくともWindowsでは、%ERRORLEVEL%に負の数を指定できます(たとえば、エラー時に-1を返すプログラムがあります)。IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%より良いオプションかもしれません。しかし、プログラムがエラー時に返すものを本当に知る必要があります。一部のプログラムは、特殊なタイプの成功に対して特定のゼロ以外のコードを返します。
ユーロミチェリ14年

app2がbatファイルで最後に実行するものである場合、エラーコードが伝播します。
-AnrDaemon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.