一个批处理文件如何获取另一个的退出代码?

时间:2013-01-11 11:47:32

标签: batch-file windows-xp

我有两个批处理文件task.batruntask.batruntask.bat调用task.bat,我希望runtask.battask.bat的退出代码转换为变量。怎么可以这样做?

task.bat:

@echo off
set errorlevel=1

runtask.bat

...
CMD /C task.bat
set taskexitcode=????

3 个答案:

答案 0 :(得分:8)

只需将CMD /C换成call

task.bat:

@echo off
set errorlevel=15

runtask.bat

call task.bat
set taskexitcode=%errorlevel%
echo %taskexitcode%

输出

15

答案 1 :(得分:0)

接受的答案是正确的,但如果您使用call调用另一个批处理脚本,并且第二个批处理脚本使用SetLocal,则可能需要使用解析技巧来完成此操作。如果您遇到此问题,请在exit b

之前添加以下代码
ENDLOCAL&set myvariable=%myvariable%

现在myvariable的值可供调用上下文使用,您可以在另一个脚本中看到该值。

参考文献:
https://stackoverflow.com/a/16167938/89590
http://www.borngeek.com/2008/05/22/exiting-batch-file-contexts/

答案 2 :(得分:0)

我在Teamcity管道中有一个批处理脚本,并且在其子脚本以代码1退出后没有退出。

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

main-script.bat

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

子脚本调用之后,退出结果将保存到%ERRORLEVEL%。如果确实存在错误退出,则该值将不等于0。因此我们进行了检查,如果是这种情况,则退出并返回代码1(错误)。