2017-06-22 109 views
0

我有这样的情况连锁命令的设置退出代码(这是在Azure上批处理任务执行的命令):Windows命令:基于第一命令

cmd /c MainApp.exe & Util.exe 

我需要的是退出这个整个命令退出MainApp.exe作为Util.exe的代码始终以0代码退出。

我已经尝试过这样的不同的括号位置,没有任何工作根据需要。

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

谢谢大家帮忙

回答

1

有两个问题:

  1. Util.exe实际上没有在你启动cmd实例的情况下调用,但我猜你想要的;要解决这个问题,要么逃避符号或引用命令行:

    cmd /C MainApp.exe ^& Util.exe 
    

    或:

    cmd /C "MainApp.exe & Util.exe" 
    
  2. 既然你试图写阅读在同一个命令行/块的变量,您需要启用和应用delayed expansion,可以通过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! 
    

    或:

    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/ 

或:

cmd /C "MainApp.exe && Util.exe || rem/" 
+0

非常感谢你的解释。命令'cmd/V/C MainApp.exe ^&设置/一个ERR =!ErrorLevel! ^&Util。exe&&exit!ERR!'就像一个魅力。 – Daniel