如何获取使用START命令启动的批处理文件的返回/退出代码?

7

我想要运行一个带有 start /high 命令的批处理文件,并且仍然能够获取返回/退出代码,即 %ERRORLEVEL%。问题似乎是命令 START 没有返回批处理文件返回的退出代码。

我们有一个简单的测试批处理文件,名为 BatFileThatReturnsOne.bat

BatFileThatReturnsOne.bat 的内容如下:

EXIT /B 1

我们将其称为这样:
start /high /wait BatFileThatReturnsOne.bat

无论批处理文件返回什么,start 命令的执行结果始终不会是除了0(零)以外的任何值 %ERRORLEVEL%

这实际上是由CloudFormation中的cfn-init调用的,但这可能与我们可以在命令行窗口中重新创建它无关。

实际调用命令为:

cmd.exe /C start /high /wait BatFileThatReturnsOne.bat

如何让start命令将%ERRORLEVEL%设置为非零值?

2个回答

8
cmd窗口或批处理文件中直接使用
start /high /wait cmd /c BatFileThatReturnsOne.bat

但是,如果您需要启动cmd实例以执行启动命令并启动批处理文件,则可以使用以下方法:

cmd /v /e /c" start /high /wait cmd /c launched.cmd & exit ^!errorlevel^!"

因为cmd实际上是在AWS CloudFormation的cfn-init中执行的,所以第二个提议的解决方案非常好。谢谢,我永远不会想到这一点! - Tim Bassett

3

只需将EXIT /B 1更改为EXIT 1

此答案表格4所述,关于START /WAIT bat命令的解释:

When the started Batch file ends, set ERRORLEVEL = value from 'EXIT number' commmand.

谢谢。问题实际上比简单的批处理文件要复杂一些(我只是创建它来测试它)。它实际上在调用chef-client,而chef-client又在调用ruby.exe。这两个都没有“EXIT / B 1”,所以MC ND的解决方案最终很好地解决了问题。 - Tim Bassett
我对你的评论感到困惑。我的答案解决了问题,就是在问题中所描述的那个问题。如果问题没有在问题中描述,那么答案怎么能解决呢?(答案:只是偶然)**:(** - Aacini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接