命令行 - 等待进程完成

时间:2015-04-08 13:50:04

标签: batch-file command-line-interface command-line-arguments

希望是一个快速的问题。我正在无人参与的脚本中安装一组驱动程序。其中一个驱动程序(英特尔USB3驱动程序)在完成后启动Windows驱动程序查找器应用程序(“drvinst.exe”),然后当nVidia驱动程序尝试运行它们时取消,因为该向导在后台运行。

:INSTALLLAPTOP79
.\ELAN\Touchpad\Setup.exe /s /a /s
.\Intel\Chipset\Setup.exe -s -norestart
.\Intel\Graphics\Setup.exe -s
.\Intel\MEI\Setup.exe -s
.\Intel\USB3\Setup.exe -s
.\Realtek\Audio\Setup.exe /s
.\Realtek\CardReader\Setup.exe /s
TIMEOUT 180
.\nVidia\Graphics\Setup.exe -n -s
GOTO :INSTALLLAPTOPWIFI

目前的代码在上面 - 但它不是很优雅。基本上如果系统比“正常”慢,那么它将失败,因为180秒是不够的。我可以增加这个值,但这对我来说很麻烦。我基本上正在寻找一种方法来“检查”以查看“drvinst.exe”是否仍在运行,如果是,则等待一段时间 - 然后再次进行检查。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

它不能保证工作(这取决于安装程序如何启动驱动程序查找程序),但是:

start /wait command...

可以做到这一点。请注意,如果要执行的命令包含空格,并且需要用双引号括起来,则您需要:

start /wait "" "c:\program files\something\..."

否则它将命令作为命令提示符的标题。

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL

notepad

:waitloop

TASKLIST /fi "imagename eq notepad.exe" >NUL
IF ERRORLEVEL 1 timeout /t 1 /n&GOTO waitloop

GOTO :EOF

这是一个等待notepad.exe关闭的简单方法。适应你的意愿......

@ECHO OFF
SETLOCAL

notepad

:waitloop

TASKLIST |find "notepad.exe" >NUL
IF ERRORLEVEL 1 timeout /t 1 /n&GOTO waitloop

GOTO :EOF

也应该起作用

答案 2 :(得分:0)

这在Windows 10(1903)中对我有效。警告:如果将它用于多次运行的进程,它将等待所有全部完成,然后再继续。

基于@Magoo的here,对我不起作用,但使我走上了正轨。

const gameName = 'g.info';

<List filterDefaultValues={{ name: !gameName }} pagination={<ListPagination />} perPage={30} sort={{ field: '_id', order: 'ASC' }} actions={<Actions />} {...props}>

答案 3 :(得分:-1)

我不知道这是否是最好的方法,但我知道它可以100%工作 当我需要等待时,我在脚本中使用了调用。

:INSTALLLAPTOP79
Call \ELAN\Touchpad\Setup.exe /s /a /s
Call \Intel\Chipset\Setup.exe -s -norestart
Call \Intel\Graphics\Setup.exe -s
Call \Intel\MEI\Setup.exe -s
Call \Intel\USB3\Setup.exe -s
Call \Realtek\Audio\Setup.exe /s
Call \Realtek\CardReader\Setup.exe /s
Call \nVidia\Graphics\Setup.exe -n -s
GOTO :INSTALLLAPTOPWIFI

调用将使脚本等到正在运行的exe完成。

不确定的目的是什么。在\服务之前,但如果有原因,您可能需要它。