【发布时间】:2010-10-27 14:07:24
【问题描述】:
类似于 Linux 中的 $?,有没有办法在 Windows 批处理文件 (.bat) 中获取程序的退出状态?
例如,程序在成功执行时有一个System.exit(0),在失败时有一个System.exit(1),我如何在.bat 文件中捕获这些退出值?
【问题讨论】:
标签: java windows batch-file exit-code
类似于 Linux 中的 $?,有没有办法在 Windows 批处理文件 (.bat) 中获取程序的退出状态?
例如,程序在成功执行时有一个System.exit(0),在失败时有一个System.exit(1),我如何在.bat 文件中捕获这些退出值?
【问题讨论】:
标签: java windows batch-file exit-code
使用%ERRORLEVEL%。您不喜欢批处理文件的简洁明了吗? :)
【讨论】:
类似:
java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%
重要的是让它成为批处理文件的绝对下一行,以避免错误级别被覆盖:)
请注意,如果您使用
IF ERRORLEVEL number
批处理文件的“特征”,它的意思是“如果错误级别大于或等于number” - 它不是基于相等的。我以前被那个咬过:)
【讨论】:
Raymond Chen 有一篇名为ERRORLEVEL is not %ERRORLEVEL% 的好博文。值得一试。
另外值得注意的是,大多数人认为是 cmets 的 REM 命令实际上并非如此。 REM 命令是一个 总是成功 的 nop 命令。在 REM 之后,错误级别始终为 0。所以
willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail
永远不会失败...
【讨论】:
主要回答 bulgar 的问题,但补充其他答案:
要使 %ERRORLEVEL% 起作用,您需要在 Windows 中激活 命令扩展(这是默认设置)。
对于一个会话:
cmd /E:on
或永久保存在注册表中
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01
更多详情:
cmd /?
[]]
【讨论】:
大多数常用的外部命令操作返回 ERRORLEVEL 0,这通常(但并非总是)表明没有遇到错误:
c:\> dir
...
c:\> echo %ERRORLEVEL%
【讨论】: