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 is not %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 中激活命令扩展(这是默认设置)。
对于一个会话:

cmd /E:on

或永久在注册表中

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

更多细节:

cmd /?

[]]

于 2009-10-26T10:21:36.430 回答
0

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

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