我有这种情况(这是在Azure Batch任务上执行的命令):
cmd /c MainApp.exe & Util.exe
我需要的是从MainApp.exe退出整个命令,因为Util.exe总是以0代码退出。
我尝试了不同的括号位置,并且根本不需要任何工作。
cmd /c (MainApp.exe) & set taskExitCode=%ERRORLEVEL% & Util.exe & exit %taskExitCode%
感谢您的帮助
答案 0 :(得分:1)
有两个问题:
Util.exe
实际上并未在您发起的cmd
实例的上下文中调用,但我想您希望这样;要解决此问题,请转义&符号或引用命令行:
cmd /C MainApp.exe ^& Util.exe
或:
cmd /C "MainApp.exe & Util.exe"
由于您尝试在同一命令行/块中编写和读取变量,因此需要启用并应用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!
如果在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/