我有一个批处理文件,它在启动时就存在(以管理员身份运行)并且不执行其中的命令,但是如果我在命令行中指定它,它运行良好并执行所有命令。
这是其中的内容:
start /wait msiexec /x SetupServices.msi /qn /l* "SetupServices.uninstall.log"
start /wait msiexec /i SetupServices.msi /qn /l* "SetupServices.install.log"
最佳答案
(正确答案)
首先,如果您批量启动 .exe 文件,则使用“call”作为前缀会更安全。
有时这是必要的,以确保批次正在等待完成。
使用“开始”是另一种可能性,但对于这个简单的用例来说不是必需的。
你写道命令没有被执行。所以,很明显,你有另一个问题,而不是“不等待......完成”的问题。
看看你新提供的例子,就是这种情况。在管理员模式下,您必须提供完整路径。使用我下面的小技巧(“%~dp0”,包括已经反斜杠),您仍然可以在批处理文件中使用当前目录。
大多数时候,如果管理员权限出现这样的问题,这是“当前目录”路径的问题。具有管理员权限的批处理文件的使用方式与我们习惯的不同,它不在自己的目录中启动(但主要在 System32 中)。不依赖CD是编写防弹批处理文件的重要事项。
一个很好的示例 batch ,在此处结合其他答案,并解决您的案例中的许多可能问题:
call msiexec /i "%~dp0MySetup.msi" /qb /L*v "%~dp0MySetup.log"
echo Returncode: %ERRORLEVEL%
pause
它正确使用当前目录,并假定安装命令行包括日志文件(仅适用于,如果您在当前目录中有写访问权限,如果没有指定具有写访问权限的日志文件的路径,如“%TEMP%\MySetup.log” .
注意:记住以管理员权限真正启动批处理文件(鼠标右键菜单或之前打开管理员命令 shell :)
关于command-line - Windows 批处理文件不等待命令完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946660/