0

大家好,我是批处理的新手,但每隔一段时间就喜欢修补和编码。我可以制作一个同时关闭两个程序的批处理文件吗?例如,我创建了一个打开两个程序的批处理文件,App_A(游戏手柄模拟器)是最小化的 App_B(离线 RPG 游戏)正常窗口。我想要的是当我关闭 App_B App_A 也会自动关闭,这样我就不必恢复窗口并手动关闭模拟器。

这是我刚刚做的代码,我也在这个网站上找到并让它工作:

ECHO OFF
start /d "C:\Documents and Settings\Computer\My Documents\Imulator\PROFILE" SET1.imulatorprofile /m
ECHO IMULATOR STARTED
start /d "C:\Program Files\App_B" App_BLauncher.exe
ECHO APP_B STARTED
ECHO OPERATION COMPLETE

非常感谢任何意见或建议!提前致谢 :)

4

2 回答 2

0

我不太擅长使用 Windows 命令行,但我会尝试以下方法:

  1. 启动模拟器(应该在 APP_B 退出后自动退出)
  2. 启动 APP_B(使用 /wait 选项 - 这应该暂停批处理)
  3. 杀死模拟器(按名称使用 PsKill)

您可以在此站点上找到有关startPsKill和其他命令的详细信息。

希望那些对你有帮助。

*约斯特


...稍后添加...

如果进程(App_B)正在运行,另一种选择是在后台进行定期检查,并在完成后继续(停止 App_A)。当 App_B 只是另一个进程(例如 App_Launched_By_B)的启动器并直接返回时,这种方法是有意义的。

这可以通过一个看起来类似于这个的小循环来完成:

start "App_A" /d "C:\Programs\App_A" App_A.exe
ECHO App_A STARTED
start "App_B" /d "C:\Programs\App_B" App_B.exe
ECHO App_B STARTED

ECHO GIVE App_B 30 SECONDS TO LAUNCH App_Launched_By_B 
SLEEP 30

:LOOP
PSLIST App_Launched_By_B >nul 2>&1
IF ERRORLEVEL 1 (
  GOTO CONTINUE
) ELSE (
  ECHO App_Launched_By_B IS STILL RUNNING - PAUSE ANOTHER 5 SECS
  SLEEP 5
  GOTO LOOP
)

:CONTINUE
PsKill App_A
ECHO App_A STOPPED

这个例子最初来自另一个答案,是由aphoria写的。我为这个案例做了一点调整。

有关PsList和其他命令的其他信息可以在此站点上找到。

我还想指出,我不太喜欢这种方法,因为它消耗了一些 cpu 而没有做太多事情。但这是我能看到的批处理文件中唯一的解决方案。

于 2013-07-16T08:04:27.087 回答
0

您可以使用另一个带有两个 taskkill 行的批处理文件,每个应用程序一个,然后启动它。

否则你需要在一个窗口中一直运行一个批处理文件,它会循环并检查 appB 是否没有运行,然后它会关闭 appA。它不是很优雅。

于 2013-07-16T09:48:32.310 回答