2017-06-22 103 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