批处理 - 如何等待具有特定名称的进程开始和完成?

Batch - How to wait for process with specific name so start and finish?

我正在创建启动脚本来启动需要特定 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 只是一个 "starter",它启动一个调试控制台和一个 Java 应用程序,它提示用户 select 播放,然后启动 selected 应用程序。

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

下面是我要实现的"flow":

  1. 脚本已启动。
  2. JAVA_HOME 变量已更改。
  3. 进程 ATLauncher.exe 开始。
  4. 进程 ATLauncher.exe 启动两个 javaw.exe 进程。
  5. 进程 ATLauncher.exe 停止。
  6. 其中一个 javaw.exe 进程启动了第三个 javaw.exe 进程。
  7. 第 3 个 javaw.exe 进程停止。
  8. 第一和第二 javaw.exe 最终停止,或者 "flow" 再次从第 6 步开始。
  9. 脚本执行更多命令并停止。

我希望这已经够清楚了!告诉我是否需要解释得更清楚一些!

谢谢!

我可以建议解决您识别 java 进程的问题之一 在启动您的 java 应用程序时提供带有 -D 选项的 JVM 参数 像这样的
java -Dappname="appname" 类名

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

试试这个:

: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