如何查看批处理文件中最后一条命令的退出代码?


Answers:


78

测试返回码是否大于或等于1:

if ERRORLEVEL 1 echo Error

要么

if %ERRORLEVEL% GEQ 1 echo Error

或测试返回码等于0:

if %ERRORLEVEL% EQU 0 echo OK

您可以使用其他命令,如GOTO在哪里展示echo


我尝试了您的代码。我收到以下错误:0 was unexpected this time.
Misha Moroshko

2
@Misha:您可能已经按照我最初发布的方式使用百分号进行了尝试。不带它们尝试一下,或者尝试我添加的其他版本。
丹尼斯·威廉姆森

2
发现%ERRORLEVEL%即使发生错误也为0的情况。签%ERRORLEVEL%入cmd文件时发生。尝试start /wait没有用。唯一有效的方法是if errorlevel 1 (...)
AlikElzin-kilaka

4
请注意,错误级别不是环境变量。这是关于陷阱和微妙之处的一个很好的总结。
尼克·韦斯特盖特

我是否建议您使用NEQ而不是EQU支持检测负返回码?不知道Windows XP是否
会这样做

10

当您拥有以下组件时,这确实有效:App1.exe调用->运行的--bat。> app2.exe

App2返回错误级别1 ...,但是您需要在.bat中捕获该错误,然后将其重新提升到app1 ......否则,.bat会吃到错误级别,而app1却不知道。

方法:

在.bat中:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

这是app2之后的错误级别检查。如果> 0,则.bat退出,并将调用app1的错误级别设置为1。


4
如果您将相同的错误返回给app1,可能会更好。我没有尝试这一点,但它应该工作: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%
维克多·佛尼克

2
至少在Windows中,%ERRORLEVEL%可以为负数(例如,我有一个在错误时返回-1的程序)。IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%可能是一个更好的选择。但是您确实需要知道程序在错误中返回的内容。某些程序会返回某些非零代码以获取特殊的成功类型。
Euro Micelli 2014年

如果app2是您在bat文件中运行的最后一件事,则错误代码将传播。
AnrDaemon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.