如何等待进程终止在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 

我使用PSLISTPSEXEC ,但你也可以使用TASKKILLTASKLIST >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和TASKLIST替换了PSLIST和PSEXEC。 由于他们似乎工作得更好,我无法让PSLIST在Windows 7中运行。

还用TIMEOUT替换睡眠。

这是我所需要的一切,以使脚本运行良好,所有的增加是由发表评论的伟大的人提供的。

另外,如果在.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”的答案,尽管对于我的情况,我发现更基本的东西。 我的进程是控制台应用程序 在我的无知中,我想我需要一些BAT语法中特别的东西,以确保第一个在第二个开始之前完成。 然而,英美烟草公司似乎在控制台应用程序和Windows应用程序之间作了区分,并且它们执行方式有点不同 OP显示窗口应用程序将作为来自BAT的异步调用启动。 但是对于同步调用的控制台应用程序,在与BAT本身运行相同的命令窗口内。

对我来说,最好不要使用“START / W”,因为一切都可以在一个命令窗口内运行。 关于“START / W”的烦人的事情是,它会产生一个新的命令窗口来执行你的控制台应用程序。