我有两个批处理文件task.bat
和runtask.bat
。 runtask.bat
调用task.bat
,我希望runtask.bat
将task.bat
的退出代码转换为变量。怎么可以这样做?
task.bat:
@echo off
set errorlevel=1
runtask.bat
...
CMD /C task.bat
set taskexitcode=????
答案 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(错误)。