Windows命令:根据第一个命令设置链接命令的退出代码

时间:2017-06-22 14:41:04

标签: azure cmd azure-batch

我有这种情况(这是在Azure Batch任务上执行的命令):

cmd /c MainApp.exe & Util.exe

我需要的是从MainApp.exe退出整个命令,因为Util.exe总是以0代码退出。

我尝试了不同的括号位置,并且根本不需要任何工作。

cmd /c (MainApp.exe) & set taskExitCode=%ERRORLEVEL% & Util.exe & exit %taskExitCode%

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

有两个问题:

  1. Util.exe实际上并未在您发起的cmd实例的上下文中调用,但我想您希望这样;要解决此问题,请转义&符号或引用命令行:

    cmd /C MainApp.exe ^& Util.exe
    

    或:

    cmd /C "MainApp.exe & Util.exe"
    
  2. 由于您尝试在同一命令行/块中编写读取变量,因此需要启用并应用delayed expansion,这可以通过{{ 1}},像这样:

    cmd /V

    或:

    cmd /V /C MainApp.exe ^& set /A ERR=!ErrorLevel! ^& Util.exe ^& exit !ERR!
    

    仅在cmd /V /C "MainApp.exe & set /A ERR=!ErrorLevel! & Util.exe & exit !ERR!" 也设置MainApp.exe时才有效,这与退出代码并不总是相同。如果没有,您可以尝试此操作(ErrorLevel操作员强制||等于当前退出代码):

    ErrorLevel

    或:

    cmd /V /C MainApp.exe ^|^| rem/ ^& set /A ERR=!ErrorLevel! ^& Util.exe ^& exit !ERR!
    
  3. 如果在cmd /V /C "MainApp.exe || rem/ & set /A ERR=!ErrorLevel! & Util.exe & exit !ERR!" 返回非零退出代码的情况下不需要执行Util.exe,请执行此操作(以便MainApp.exe的退出代码存活):

    MainApp.exe

    或:

    cmd /C MainApp.exe ^&^& Util.exe
    

    如果cmd /C "MainApp.exe && Util.exe" 确实未设置MainApp.exe,您可以尝试以下操作:

    ErrorLevel

    或:

    cmd /C MainApp.exe ^&^& Util.exe || rem/