我有一个批处理文件,它在启动时就存在(以管理员身份运行)并且不执行其中的命令,但是如果我在命令行中指定它,它运行良好并执行所有命令。

这是其中的内容:

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 :)


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!