批处理 - 如何等待具有特定名称的进程,以便开始和结束?

时间:2015-01-31 12:59:39

标签: java batch-file process

我正在创建一个启动脚本来启动一个需要特定Java版本的游戏启动器。它目前看起来像这样:

@ECHO OFF
echo Enabling Java 7...
SET JAVA_HOME=C:\Program Files\Java\jre7
echo Active Java version location: %JAVA_HOME%
echo Starting ATLauncher...
start /wait ATLauncher.exe
echo Launcher started!

它只是将Java版本设置为Java 7(将JAVA_HOME环境变量更改为Java 7 jre的路径)并启动游戏启动器(ATLauncher.exe)并等待它完成。这就是我想要的,除了一件事:进程ATLauncher.exe只是一个“启动器”,它启动一个调试控制台和一个Java应用程序,它提示用户选择要播放的内容,然后启动所选的应用

这带来两个问题:
1:所有应用程序在ATLauncher.exe进程之后启动都是Java程序,因此它们的进程名称只是javaw.exe,因此很难识别它们。
2:批处理文件在ATLauncher.exe进程停止时关闭(这是我所期望的),但我希望它一直运行,直到最后一个已启动的Java进程终止,然后再运行一些命令,然后停止。

这是我想要实现的“流程”:

  1. 脚本已启动。
  2. JAVA_HOME变量已更改。
  3. 流程ATLauncher.exe开始。
  4. 流程ATLauncher.exe启动两个javaw.exe流程。
  5. 流程ATLauncher.exe停止。
  6. 其中一个javaw.exe进程启动了第3个javaw.exe进程。
  7. 第3个javaw.exe进程停止。
  8. 第一个和第二个javaw.exe最终停止,或者“流程”再次从第6步开始。
  9. 该脚本执行更多命令并停止。
  10. 我希望这很清楚!告诉我是否必须更清楚地解释一下!

    谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

:loop
rem wait 4 sec
ping -n 5 localhost >nul
tasklist /fi "IMAGENAME EQ javaw.exe" /fi "STATUS EQ RUNNING" | find /i "javaw.exe" > nul && goto:loop
rem more commands here

答案 1 :(得分:0)

我可以建议您解决一个识别java进程的问题 在启动Java应用程序时,使用-D选项提供JVM参数 这样的事情
java -Dappname =“appname”classname

稍后在通过ps或其他命令搜索应用程序时,在appname上放置一个grep。 希望这会有所帮助。