如何等待进程终止在batch file中执行另一个进程
如何在batch file中执行另一个进程之前等待进程终止? 比方说,我有一个进程notepad.exe
,我需要杀死之前执行wordpad.exe
。 然后,当wordpad.exe
被终止,我需要再次启动notepad.exe
。 我怎么做?
尝试这样的事情…
@ECHO OFF PSKILL NOTEPAD START "" "C:\Program Files\Windows NT\Accessories\wordpad.exe" :LOOP PSLIST wordpad >nul 2>&1 IF ERRORLEVEL 1 ( GOTO CONTINUE ) ELSE ( ECHO Wordpad is still running SLEEP 5 GOTO LOOP ) :CONTINUE NOTEPAD
我使用PSLIST
和PSEXEC
,但你也可以使用TASKKILL
和TASKLIST
。 >nul 2>&1
就是在那里隐藏PSLIST
所有输出。 SLEEP 5
行不是必需的,但只是在那里限制你检查写字板是否仍在运行的频率。
使用start / w程序名等待程序名的结尾
START /W notepad ECHO Back from notepad START /W wordpad ECHO Back from wordpad START /W notepad
这是aphoria的答案的更新版本。
我用TASKKILL和TASKLISTreplace了PSLIST和PSEXEC。 由于他们似乎工作得更好,我无法让PSLIST在Windows 7中运行。
还用TIMEOUTreplace睡眠。
这是我所需要的一切,以使脚本运行良好,所有的增加是由发表评论的伟大的人提供的。
另外,如果在.exe启动之前有一个延迟,那么可能需要在:loop之前插入一个超时值。
@ECHO OFF TASKKILL NOTEPAD START "" "C:\Program Files\Windows NT\Accessories\wordpad.exe" :LOOP tasklist | find /i "WORDPAD" >nul 2>&1 IF ERRORLEVEL 1 ( GOTO CONTINUE ) ELSE ( ECHO Wordpad is still running Timeout /T 5 /Nobreak GOTO LOOP ) :CONTINUE NOTEPAD
我喜欢“START / W”的答案,尽pipe对于我的情况,我发现更基本的东西。 我的进程是控制台应用程序 在我的无知中,我想我需要一些BAT语法中特别的东西,以确保第一个在第二个开始之前完成。 然而,英美烟草公司似乎在控制台应用程序和Windows应用程序之间作了区分,并且它们执行方式有点不同 OP显示窗口应用程序将作为来自BAT的asynchronous调用启动。 但是对于同步调用的控制台应用程序,在与BAT本身运行相同的命令窗口内。
对我来说,最好不要使用“START / W”,因为一切都可以在一个命令窗口内运行。 关于“START / W”的烦人的事情是,它会产生一个新的命令窗口来执行你的控制台应用程序。