在 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
您可以使用其他命令,例如GOTO
where 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