如何在批处理文件中执行另一个进程之前等待进程终止?假设我有一个进程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
行不是必需的,但它只是限制您检查写字板是否仍在运行的频率。
TASKLIST不会以这种方式接收参数。我怎样才能使用任务列表? –
它看起来像'TASKLIST'不设置'ERRORLEVE'。作为解决方法,您可以通过'FIND'管道输出'TASKLIST'。像这样的东西,'TASKLIST |找到/我“写字板”'。 – aphoria
这很弱。使用'开始/等待'就像自然的意图。 –
使用启动/ W PROGRAMNAME等待PROGRAMNAME
START /W notepad
ECHO Back from notepad
START /W wordpad
ECHO Back from wordpad
START /W notepad
这比完整的批次要简单得多,而且完美地工作。请注意,如果为程序名称使用引号,则需要添加* title *参数。有关更多信息,请参阅'help start'。 –
比接受的答案好得多 –
其实,为什么你需要'start/w'?我自己认为需要使用'start/w'来阻止批处理文件,直到GUI(与控制台相对)应用程序完成。但现在测试它,我发现批处理文件实际上等待着GUI应用程序。我发布了相应的问题:[为什么GUI应用程序阻止批处理文件?](http://stackoverflow.com/questions/19381082/why-gui-application-blocks-a-batch-file) –
结束时,我喜欢的 “START/W” 的答案,但我的情况,我发现更基本的东西。我的进程是控制台应用程序而在我的无知中,我认为我需要一些BAT语法中特别的东西来确保第一个在第二个开始之前完成。然而,英美烟草公司似乎在控制台应用程序和Windows应用程序之间作了区分,并且它们执行方式稍有不同OP显示窗口应用程序将作为来自BAT的异步调用启动。但对于同步调用的控制台应用程序,在与BAT本身运行相同的命令窗口内。
对我来说,实际上最好不要使用“START/W”,因为一切都可以在一个命令窗口内运行。关于“START/W”的烦人之处在于它会产生一个新的命令窗口来执行您的控制台应用程序。
使用开关/ B,它将在同一窗口中执行。 – Uhlen
啊我明白了。但是,直接调用“My.exe”与“START/B My.exe”是否有区别?这似乎是同样的事情。 –
这是aphoria的答案的更新版本。
我用TASKKILL和TASKLIST替换了PSLIST和PSEXEC。由于他们似乎工作得更好,我无法让PSLIST在Windows 7中运行。
还用TIMEOUT替换了Sleep。
这就是我需要的一切,让脚本运行良好,所有的补充都是由发布评论的好人提供的。
另外,如果在启动.exe之前有延迟,可能需要在:loop之前插入Timeout。
@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
call process1
call process2
在这种情况下,进程2才会开始过程1完成
。
你应该更仔细地阅读问题(和评论)。在第一条评论中,解释了为什么'CALL'不是一个通用的解决方案 – jeb
- 1. 等待一个进程完成并执行另一个进程
- 2. python执行子进程而不等待子进程终止
- 3. 如何等待每个进程在以下示例中终止?
- 4. 如何等待进程终止(并等待相应的子进程)在PHP中?
- 5. 终止一个批处理文件与另一个批处理
- 6. 如何让java程序等到用java进程执行的批处理文件终止
- 7. 如何运行从另一个批处理文件,但在一个单独的进程的批处理文件?
- 8. 如何使一个进程等待另一个进程
- 9. 如何启动分离进程并等待父进程终止?
- 10. 批处理文件:停止进程
- 11. 强制批处理文件等待他自己的进程
- 12. 如何不等待一个进程在批处理脚本中完成?
- 13. Windows批处理:在后台运行进程并等待它
- 14. 批处理文件,使另一个批处理文件执行
- 15. 一个进程如何在PHP中等待另一个进程的输入?
- 16. Windows批处理命令执行问题文件被另一个进程使用
- 17. 如何在另一个进程停止运行时结束批处理脚本
- 18. 使用批处理文件通过网络终止进程
- 19. Ctrl + C终止进程不是批处理文件
- 20. 等待进程终止失败
- 21. 等待子进程终止于R
- 22. 当等待()结束时进程终止
- 23. 如何在处理多个文件时进行inotify等待
- 24. 一个进程通过文件系统等待另一个进程的输出
- 25. 从一个新的命令提示符批处理文件终止进程
- 26. 批处理文件 - 如果只有一个实例正在运行,如何终止进程?
- 27. 如何设置一个进程以便在另一个进程之后执行?
- 28. 使用进程和运行时类执行批处理文件
- 29. 如何在.NET中等待另一个进程的状态?
- 30. Java如何在单独的进程树中执行批处理文件
@sarnold问题是,Win32是... Win32。有些程序(如写)会从父进程中分离*,而其他程序(如记事本)则不会。 – 2011-11-18 04:39:22
@pst:我以为你不得不专门用'start'去支队......哦,哇。那太糟了_。 – sarnold
@sarnold糟糕:记事本不分离,写入。这与写程序有关,不一定是Win32,尽管很多UI程序(不打算从shell调用)似乎都是这样工作的。我相当确定'CreateProcess'是相关的。 – 2011-11-18 04:42:19