25

Linuxの場合と同様に$?、Windowsバッチファイル(.bat)でプログラムの終了ステータスを取得する方法はありますか?
たとえば、プログラムのSystem.exit(0)実行が成功したときと失敗したときの場合、これらの終了値をファイルSystem.exit(1)にトラップするにはどうすればよいですか?.bat

4

5 に答える 5

28

%ERRORLEVEL%を使用します。バッチファイルがどのように明確で簡潔であるかが好きではありませんか?:)

于 2009-05-20T09:41:05.170 に答える
28

何かのようなもの:

java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%

エラーレベルが上書きされないように、これをバッチファイルの絶対次の行にすることが重要です:)

を使用する場合は注意してください

IF ERRORLEVEL number

バッチファイルの「機能」とは、「エラーレベルが「以上」の場合」を意味します。これは、同等number性に基づくものではありません。私は今までにそれによって噛まれました:)

于 2009-05-20T09:42:03.247 に答える
20

Raymond Chenには、ERRORLEVELという名前の優れたブログ投稿があります。 %ERRORLEVEL%ではありません。チェックアウトする価値があります。

また、ほとんどの人がコメントと考えるREMコマンドは実際にはそうではないことも注目に値します。REMコマンドは、常に成功するnopコマンドです。REMの後、エラーレベルは常に0です。

willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail

失敗することはありません...

于 2009-05-20T09:46:06.267 に答える
1

主にbulgarの質問に答えますが、他の答えを補完します:

%ERRORLEVEL% を機能させるには、Windows でコマンド拡張機能を有効にする必要があります (これがデフォルトです)。
1 つのセッションの場合:

cmd /E:on

または永続的にレジストリに

 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01

詳細については:

cmd /?

[]]

于 2009-10-26T10:21:36.430 に答える
0

通常の外部コマンド操作のほとんどはERRORLEVEL0を返します。これは通常(常にではありませんが)、エラーが発生しなかったことを示します。

c:\> dir
...
c:\> echo %ERRORLEVEL%
于 2009-05-20T09:45:29.950 に答える