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

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

在 Windows 的批处理文件中,我使用7-zip像这样:

...\right_path\7z a output_file_name.zip file_to_be_compressed

我如何检查退出代码7z并采取适当的措施?

答案1

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

if ERRORLEVEL 1 echo Error

或者

if %ERRORLEVEL% NEQ 0 echo Error

或者测试返回代码是否等于 0:

if %ERRORLEVEL% EQU 0 echo OK

您可以使用其他命令,例如GOTOwhere I show echo

答案2

当你有以下情况时,这确实有效:App1.exe 调用 -> 运行的 .bat --> app2.exe

App2 返回错误级别 1...但您需要在.bat 中捕获它并将其重新提升到 app1...否则.bat 会吃掉错误级别而 app1 永远不会知道。

方法:

在.bat中:

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

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

答案3

我在 Teamcity 管道中有一个批处理脚本,当它的子脚本以代码 1 退出后,它也没有退出。

为了解决这个问题,我IF %ERRORLEVEL% NEQ 0 EXIT 1在子脚本调用后添加了这个字符串。

主脚本

...some code
call child-script.bat
IF %ERRORLEVEL% NEQ 0 EXIT 1
...some code

子脚本调用退出后,结果将保存到%ERRORLEVEL%。如果确实因错误退出,%ERRORLEVEL%则不等于 0,在这种情况下,我们以代码 1(错误)退出。

答案4

尝试这个:

cd.>nul | call Your_7z_File.Bat && Goto :Next || Goto :Error

:: Or...

cd.>nul | ...\right_path\7z.exe a output_file_name.zip file_to_be_compressed && Goto :Next || Goto :Error

1)设置错误级别==0

cd.>nul

2)重定向以|同时调用Your_7z_File.Bat

cd.>nul | call Your_7z_File.Bat

3)让输出/错误级别有条件地执行&&||过滤下一个动作

cd.>nul | call Your_7z_File.Bat && Goto :Next || Goto :Error

您还可以在命令行中添加以下内容进行测试echo/

cd.>nul | call Your_7z_File.Bat && echo\Goto :Next || echo\Goto :Error

相关内容