Answers:
尝试跑步
START /WAIT Install.exe
like start /wait install; exit
?
cmd /C start /wait install
直接从批处理文件调用exe或使用start /wait
都可以,但是需要注意的是。
如果您调用的exe然后创建了另一个进程,例如调用另一个exe,然后退出,则批处理文件将在被调用的exe终止后继续处理,因为它不知道它启动的其他进程。
在您的情况下,这是一个真正的问题,因为安装程序通常会从某种形式的压缩容器中提取文件,这些压缩容器可能会嵌入exe本身,然后启动其中一个提取文件并退出。一些安装程序提供命令行参数,这些参数告诉原始exe文件直到整个安装完成才退出,因此您可能需要调查一下。除此之外,仅使用批处理文件就无法解决此问题,因此需要采用编程解决方案来解决。
msiexec
通常还会触发其他进程。:(
start /wait
呢?我本人认为,必须使用它start /wait
来阻止批处理文件,直到GUI(与控制台相反)应用程序完成为止。但是现在进行测试,我发现批处理文件实际上甚至在等待GUI应用程序。我已经发布了相应的问题:为什么GUI应用程序会阻止批处理文件?
这是一个使用MATLAB的示例!我假设已经完成了MATLAB的路径设置,并且FileName.m文件(或用户在内部指定了它)可以确保MATLAB退出。
echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit
我遇到或描述了@John Gardeniers的问题,我的exe调用了另一个exe并终止了,因此启动/等待不起作用。我创建了一个“ while循环”来检查它是否正在运行,然后在完成后继续前进。可以根据您的需求调整时间。
TIMEOUT /T 60
SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN
您可以使用start / wait命令。这将启动一个应用程序,并等待其结束。
或者,如果您知道执行所需的时间,则可以查看Windows Server 2003资源工具包工具提供的sleep命令。Sleep.exe可用于将批处理暂停任何秒数,以允许程序在批处理文件继续安装其他任何文件之前完全安装。由于程序本身会启动另一个进程,因此有些程序会忽略“ start / wait”语法,因此sleep.exe非常有用。