类似于Linux中的$?
,是否有办法在Windows批处理文件(.bat
)中获取程序的退出状态?
例如,程序在成功执行时有System.exit(0)
,在失败时有System.exit(1)
,如何在.bat
文件中捕获这些退出值?
答案 0 :(得分:27)
使用%ERRORLEVEL%。难道你不喜欢批处理文件的清晰和简洁吗? :)
答案 1 :(得分:27)
类似的东西:
java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%
将此作为批处理文件的绝对下一行非常重要,以避免错误级别被覆盖:)
请注意,如果您使用
IF ERRORLEVEL number
批处理文件的“功能”,表示“如果错误级别大于或等于number
” - 它不是基于相等性。在此之前我一直被它咬过:)
答案 2 :(得分:19)
Raymond Chen有一篇名为ERRORLEVEL is not %ERRORLEVEL%的好文章。值得一试。
另外值得注意的是,REM命令被大多数人认为是评论,实际上并非如此。 REM命令是一个nop命令,总是成功。在REM之后,错误级别始终为0.所以
willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail
永远不会失败......
答案 3 :(得分:1)
主要回答 bulgar 的问题,但补充其他答案:
要使%ERRORLEVEL%正常工作,您需要在Windows中激活命令扩展名(这是默认设置)。
一次会议:
cmd /E:on
或永久在注册表中
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01
了解更多详情:
cmd /?
[]]
答案 4 :(得分:0)
大多数常见的外部命令操作返回 ERRORLEVEL 0,这通常(但不是总是)表示没有遇到错误:
c:\> dir
...
c:\> echo %ERRORLEVEL%