Windows 命令:根据第一个命令设置链接命令的退出代码
Windows command: Set exit code of chained commands based on first command
我有这种情况(这是在 Azure Batch 任务上执行的命令):
cmd /c MainApp.exe & Util.exe
我需要的是使用 MainApp.exe 的退出代码退出整个命令,因为 Util.exe 总是以 0 代码退出。
我尝试过使用不同的括号位置进行类似的操作,但没有任何效果。
cmd /c (MainApp.exe) & set taskExitCode=%ERRORLEVEL% & Util.exe & exit %taskExitCode%
感谢您的帮助
有两个问题:
Util.exe
实际上不会在您启动的 cmd
实例的上下文中调用,但我想您想要那个;要解决此问题,请转义与号或引用命令行:
cmd /C MainApp.exe ^& Util.exe
或:
cmd /C "MainApp.exe & Util.exe"
由于您试图在同一命令 和 中读取变量 line/block,因此您需要启用并应用 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
returns一个非零退出代码,这样做(所以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/"
我有这种情况(这是在 Azure Batch 任务上执行的命令):
cmd /c MainApp.exe & Util.exe
我需要的是使用 MainApp.exe 的退出代码退出整个命令,因为 Util.exe 总是以 0 代码退出。
我尝试过使用不同的括号位置进行类似的操作,但没有任何效果。
cmd /c (MainApp.exe) & set taskExitCode=%ERRORLEVEL% & Util.exe & exit %taskExitCode%
感谢您的帮助
有两个问题:
Util.exe
实际上不会在您启动的cmd
实例的上下文中调用,但我想您想要那个;要解决此问题,请转义与号或引用命令行:cmd /C MainApp.exe ^& Util.exe
或:
cmd /C "MainApp.exe & Util.exe"
由于您试图在同一命令 和 中读取变量 line/block,因此您需要启用并应用 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
returns一个非零退出代码,这样做(所以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/"