如何等待批处理文件中的exe完成?


43

我正在尝试创建一个脚本,以便在关机时执行exe以便安装sp1。我的脚本类似(不是实际的蝙蝠脚本)。

If installed GOTO END
    Install.exe
END:

我的问题是,当它运行时,它会启动安装程序,然后完成脚本,因为安装程序是一个不同的过程,并且由于计算机正在关闭并关闭了系统,因此关闭了安装过程(至少,我是这样认为的)它在做。)

有什么办法让它等待,直到启动过程完成然后关闭?

Answers:



23

一种较短的方法:

Install.exe|more

install|rem

可以使用,尽管最终您可以捕获一些控制台输出。这就是它起作用的原因-管道命令等待输入,直到.exe完成


为什么要贬低?
npocmaka

太好了!我投票给你。
张昌望2015年

2
这显然是赢了
Fnord

如果exe带有参数怎么办?那将如何工作?
m4l490n

@ m4l490n-可以正常工作。重定向和条件执行运营商已经在批处理脚本较高的优先级(<>>>&&&|||
npocmaka

13

直接从批处理文件调用exe或使用start /wait都可以,但是需要注意的是。

如果您调用的exe然后创建了另一个进程,例如调用另一个exe,然后退出,则批处理文件将在被调用的exe终止后继续处理,因为它不知道它启动的其他进程。

在您的情况下,这是一个真正的问题,因为安装程序通常会从某种形式的压缩容器中提取文件,这些压缩容器可能会嵌入exe本身,然后启动其中一个提取文件并退出。一些安装程序提供命令行参数,这些参数告诉原始exe文件直到整个安装完成才退出,因此您可能需要调查一下。除此之外,仅使用批处理文件就无法解决此问题,因此需要采用编程解决方案来解决。


您总是可以向关闭例程添加循环,以检查msiexec.exe(或它到底在运行什么),然后等待并再次循环。
mfinni 2011年

@mfinni只是为了进一步使事情复杂化,msiexec通常还会触发其他进程。:(
约翰·加迪尼尔

1
其实,您为什么需要start /wait呢?我本人认为,必须使用它start /wait来阻止批处理文件,直到GUI(与控制台相反)应用程序完成为止。但是现在进行测试,我发现批处理文件实际上甚至在等待GUI应用程序。我已经发布了相应的问题:为什么GUI应用程序会阻止批处理文件?
2013年

我遇到了这个问题,请添加我的解决方案作为答案。
FreeSoftwareServers

5

这是一个使用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

2
假设Matlab对我来说有点奇怪,尤其是在serverfault上。
2014年

这可以用于MATLAB以外的其他功能。只需将“ MATLAB.exe”更改为其他名称即可。也许修复第二个“查找”以在过滤后的输出中再次搜索exe。
奥利弗·博克

1

我遇到或描述了@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

0

您可以使用start / wait命令。这将启动一个应用程序,并等待其结束。

或者,如果您知道执行所需的时间,则可以查看Windows Server 2003资源工具包工具提供的sleep命令。Sleep.exe可用于将批处理暂停任何秒数,以允许程序在批处理文件继续安装其他任何文件之前完全安装。由于程序本身会启动另一个进程,因此有些程序会忽略“ start / wait”语法,因此sleep.exe非常有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.