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

Posted

技术标签:

【中文标题】一个批处理文件如何获取另一个批处理文件的退出代码?【英文标题】:How can one batch file get the exit code of another? 【发布时间】:2012-12-25 23:59:54 【问题描述】:

我有两个批处理文件,task.batruntask.batruntask.bat调用task.bat,我希望runtask.battask.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

ma​​in-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/

【讨论】:

以上是关于一个批处理文件如何获取另一个批处理文件的退出代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取批处理脚本的任务计划程序上次运行结果退出代码?

php 如何把一个txt文件内容写入到另一个txt文件中?

Windows批处理文件中的Docker退出代码

如何阻止 Windows 批处理文件提前退出?

如何获取批处理文件以执行下一个命令而无需等待

命令行程序的返回值