如何在Windows批处理文件中获取Java程序的退出状态

25
类似于 Linux 中的 $?,在 Windows 的批处理文件(.bat)中是否有一种方法可以获取程序的退出状态?例如,当程序成功执行时,使用 System.exit(0),失败时使用 System.exit(1),如何在 .bat 文件中捕获这些退出值?
5个回答

29

类似于:

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

这一行代码必须紧接着在批处理文件中写入,以避免错误级别被覆盖 :)

请注意,如果使用

标签将该代码断开,则可能会发生意料之外的结果。

IF ERRORLEVEL number

"feature" of batch files, it means "if the error level is greater than or equal to number" - it's not based on equality. I've been bitten by that before now :)

批处理文件的“特性”,它表示“如果错误级别大于或等于数字”,并非基于相等性。我以前就遇到过这种情况 :)

我在这个答案上遇到了一个小问题...据我所知,在set命令中不能使用空格,所以应该是set exitcode=%ERRORLEVEL%。不管怎样,对我来说做出那个修改可行。 - Richard Fawcett

28
使用%ERRORLEVEL%。 你喜欢批处理文件清晰简洁的方式吗? :)

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

永远不会失败...


1

主要回答 bulgar 的问题,但是补充其他答案:

要让 %ERRORLEVEL% 正常工作,你需要在 Windows 中启用 命令扩展(这是默认设置)。
对于一个会话:

cmd /E:on

或者永久地在注册表中

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

更多细节请查看:

cmd /?

[]]


0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接