类似于$?
在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%