web-dev-qa-db-ja.com

WindowsバッチファイルでJavaプログラムの終了ステータスを取得する方法

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

25
pugmarx

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

27

何かのようなもの:

Java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%

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

を使用する場合は、

IF ERRORLEVEL number

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

28
Jon Skeet

Raymond Chenが ERRORLEVEL is not%ERRORLEVEL% という名前の優れたブログ投稿を公開しています。チェックアウトする価値があります。

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

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

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

19
JesperE

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

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

cmd /E:on

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

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

詳細については:

cmd /?

[]]

1
user85421

通常の外部コマンド操作のほとんどは[〜#〜] errorlevel [〜#〜] 0を返し、これは通常(ただし常にではない)エラーが発生しなかったことを示します。

c:\> dir
...
c:\> echo %ERRORLEVEL%
0
dfa