如何在Windowsbatch file中获取Java程序的退出状态

类似于$? 在Linux中,有没有办法在Windowsbatch file.bat )中获取程序的退出状态?
例如,程序成功执行后有一个System.exit(0) ,出现故障时有一个System.exit(1) ,如何将这些出口值捕获到.bat文件中?

使用%ERRORLEVEL% 。 你不喜欢批处理文件是如何清晰简明的? 🙂

就像是:

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

将它作为批处理文件的绝对下一行非常重要,以避免错误级别被覆盖:)

请注意,如果你使用

 IF ERRORLEVEL number 

批处理文件的“特征”,意思是“如果错误级别大于或等于number ” – 它不基于相等性。 我现在已经被咬了

Raymond Chen有一个很好的博客文章,名为ERRORLEVEL,不是%ERRORLEVEL% 。 值得检查。

另外值得注意的是,大多数人认为是评论的REM命令实际上不是。 REM命令是一个总是成功的nop命令。 REM之后,错误级别始终为0.所以

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

永远不会失败

主要回答保加尔的问题,但补充其他答案:

为了%ERRORLEVEL%的工作,你需要在Windows中激活命令扩展 (这是默认的)。
对于一个会话:

 cmd /E:on 

或永久在注册表中

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

更多细节:

 cmd /? 

[]]

大多数通常的外部命令操作返回ERRORLEVEL 0,这通常(但不是总是)表示没有遇到错误:

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