【问题标题】: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=????

【问题讨论】:

    标签: batch-file windows-xp


    【解决方案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://stackoverflow.com/a/16167938/89590
      http://www.borngeek.com/2008/05/22/exiting-batch-file-contexts/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 1970-01-01
        • 2017-04-23
        • 2017-08-02
        • 1970-01-01
        相关资源
        最近更新 更多