你如何等待一个exe在批处理文件中完成?

Kra*_*lin 58 windows batch-file executable

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

If installed GOTO END
    Install.exe
END:
Run Code Online (Sandbox Code Playgroud)

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

有没有办法告诉它等待它启动的进程完成然后关闭?

Bar*_*Vos 100

尝试跑步

START /WAIT Install.exe
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用...尝试调用 MSBuild(大约需要 2 分钟),并且会立即返回。如何调试这个? (2认同)

npo*_*aka 27

一种更短的方法:

Install.exe|more
Run Code Online (Sandbox Code Playgroud)

install|rem
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*ers 17

直接从批处理文件中调用 exe 或使用start /wait都可以,但有一个警告。

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

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


Rac*_*mar 6

这是使用 MATLAB 的示例!我假设 MATLAB 的路径设置已完成,并且 MATLAB 退出由 FileName.m 文件(或用户已在内部指定)确保。

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit
Run Code Online (Sandbox Code Playgroud)

  • 假设 Matlab 对我来说似乎有点奇怪,尤其是在 serverfault 上。 (2认同)