从批处理文件中获取错误代码

Dlo*_*ker 37 windows batch-file exit-code

我有一个运行几个可执行文件的批处理文件,我希望它在成功时退出,但如果退出代码<> 0则停止.我该怎么办?

Hel*_*ion 44

听起来你会想要"If Errorlevel"命令.假设您的可执行文件在失败时返回非0退出代码,您执行以下操作:

myProgram.exe
if errorlevel 1 goto somethingbad
echo Success!
exit
:somethingbad
echo Something Bad Happened.
Run Code Online (Sandbox Code Playgroud)

错误级别检查作为更大或相等的检查完成,因此任何非0退出值都将触发跳转.因此,如果您需要检查多个特定退出值,则应首先检查最高值.

  • 你不想在那里使用`exit`,因为它会杀死shell.使用`goto:EOF`或`exit/b`以便批处理文件终止. (3认同)
  • 此外,因为在Windows 2000周围,有一个名为`%ERRORLEVEL%`的"虚拟"环境变量,可以使用`==`,`EQU`,`LSS`等进行测试. (2认同)
  • 哦,对于子孙后代,要让它在出错之后停止:afterbad,使用"暂停"命令 (2认同)

Che*_*vel 28

您还可以使用条件处理符号进行简单的成功/失败检查.例如:

myProgram.exe && echo Done!
Run Code Online (Sandbox Code Playgroud)

Done!只有在myProgram.exe返回错误级别为0时才会打印.

myProgram.exe || PAUSE
Run Code Online (Sandbox Code Playgroud)

如果myProgram.exe返回非零错误级别,将导致批处理文件暂停.

  • 所以你可以这样做:`myProgram.exe || 退出/ b 1`停止其余命令? (4认同)

Moh*_*han 7

Hellion 的答案更好的解决方案是检查%ERRORLEVEL%环境变量:

IF %ERRORLEVEL% NEQ 0 (
  REM do something here to address the error
)
Run Code Online (Sandbox Code Playgroud)

IF如果返回代码不是零,而不仅仅是大于零的值,它就会执行主体。

该命令IF ERRORLEVEL 1 ...错过了负返回值。一些程序也可能使用负值来表示错误。

顺便说一句,我喜欢Cheran 的回答(使用&&||运算符),并向所有人推荐。

有关该主题的更多信息,请阅读这篇文章