类似于$?
Linux,有没有办法在 Windows 批处理文件 ( .bat
) 中获取程序的退出状态?
例如,程序有一个System.exit(0)
成功执行,System.exit(1)
一个失败,我如何在.bat
文件中捕获这些退出值?
问问题
39567 次
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 回答