一个批处理文件如何获取另一个批处理文件的退出代码?
Posted
技术标签:
【中文标题】一个批处理文件如何获取另一个批处理文件的退出代码?【英文标题】:How can one batch file get the exit code of another? 【发布时间】:2012-12-25 23:59:54 【问题描述】:我有两个批处理文件,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=????
【问题讨论】:
【参考方案1】:只需将CMD /C
替换为call
。
task.bat:
@echo off
set errorlevel=15
runtask.bat
call task.bat
set taskexitcode=%errorlevel%
echo %taskexitcode%
输出
15
【讨论】:
工作就像一个魅力,谢谢。它还允许在task.bat
中设置变量并在runtask.bat
中读取。非常感谢!
太好了,不用担心。我实际上并不知道变量,很好:)
exit 命令有一个/B
开关,用于设置批处理脚本的退出代码。
@william-bettridge-radford: /B
确定是 exit
终止脚本还是 cmd.exe
也终止。它与退出代码无关。
EXIT /?
列出EXIT /B [exitCode]
;它设置退出代码并从子例程或脚本返回。【参考方案2】:
我在 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(错误)退出。
【讨论】:
【参考方案3】:接受的答案是正确的,但如果您使用call
调用另一个批处理脚本,而第二个批处理脚本使用SetLocal
,您可能需要使用解析技巧来完成此操作。如果您遇到这种情况,请在您的 exit b
之前添加以下代码:
ENDLOCAL&set myvariable=%myvariable%
现在myvariable
的值可供调用上下文使用,您可以在其他脚本中看到该值。
参考资料:https://***.com/a/16167938/89590http://www.borngeek.com/2008/05/22/exiting-batch-file-contexts/
【讨论】:
以上是关于一个批处理文件如何获取另一个批处理文件的退出代码?的主要内容,如果未能解决你的问题,请参考以下文章