如何运行start / wait然后在一行上执行另一个命令作为一个命令?

时间:2014-07-29 15:50:09

标签: command-prompt msiexec errorlevel

我试图在命令提示符中使用以下命令:

    start /wait msiexec /i WebPlatformInstaller_3_10_amd64_en-US.msi /qn /l*v c:\webplatform.log & echo %ERRORLEVEL% 

我遇到的问题是该命令在msiexec进程完成之前返回%ERRORLEVEL%。

当我单独运行这两个命令时(在命令提示符或批处理脚本中),即运行以下命令,它会正确返回%ERRORLEVEL%(在该过程完成后):

    start /wait msiexec /i WebPlatformInstaller_3_10_amd64_en-US.msi /qn /l*v c:\webplatform.log
    echo %ERRORLEVEL% 

但是我想将这些命令作为一个命令在一行上运行,而不是两个单独的命令,这可能吗?

2 个答案:

答案 0 :(得分:0)

首先,在第一行添加“& echo%ERRORLEVEL%”应该可以达到你想要的效果。 &符号是在一行上排队两个命令的标准字符(如果您没有更改系统上的默认值)。

我无法完全重现您的问题。 “启动/等待msiexec / i ..”在我的系统上等待正常。 但是在ERROR的情况下,我在一行中看到了另一个ERRORLEVEL值而不是两行,所以这里的事情有点奇怪。 我在start.exe中看到了一些奇怪的东西,并且不喜欢它 但是为什么你如此渴望从命令行调用所有内容? 根据我的经验,从批处理文件(使用“call msiexec ...”)执行此操作更安全。

但还有一个提示:

尝试使用/ qb而不是/ qn。在我的情况下,这导致了相同的ERRORLEVEL。似乎它只能通过一个对话框完全等待,或者也许是行为。

答案 1 :(得分:0)

你的问题不明确。

您的意思是即使start ed命令尚未完成,该行仍会显示该值吗?

或者您的意思是显示的值是errorlevel命令之前start的值,而不是start命令建立的值(尽管获得了响应 start ed命令完成后?

我试试

setlocal enabledelayedexpansion
start .....&echo !errorlevel!

它仍然是2行,除非您使用setlocal作为@echo off之后的行(按照习惯的方式)