如何使批处理文件等待某个进程开始,然后继续?

如何使批处理文件等待某个进程开始,然后继续?

有人能告诉我我需要在 [X] 中写入什么才能让 Maplestory.exe 进程在启动时被终止吗?我不想使用计时命令,谢谢!(导致gamelauncher.exe运行maplestory.exe

@echo off
start D:\Games\MapleStory\GameLauncher.exe
[X]
taskkill /im MapleStory.exe
exit

答案1

我会将输出从tasklist导入find,搜索maplestory,然后使用IF语句和GOTO继续循环,检查该进程,直到找到它。一旦找到它,您就可以从GOTO不同的点终止该任务。

像这样的事情应该可以解决问题:

:search
tasklist|find "maple"
IF %ERRORLEVEL% == 0 GOTO :found
TIMEOUT /T 1
GOTO :search

:found
taskkill /im maplestory.exe

(该TIMEOUT命令将脚本暂停 1 秒。这将有助于防止它在不断运行该循环时消耗过多的 CPU。)

答案2

为什么必须运行任何东西?您可以随时尝试终止该过程,然后在成功(&&操作符)或失败(||操作符)时采取行动。您可以简单地通过 GOTO 循环,直到取得成功。

@echo off
start D:\Games\MapleStory\GameLauncher.exe
:killMapleStory
taskkill /im MapleStory.exe >nul 2>nul || goto killMapleStory
exit

您可能想在循环中引入 1 秒延迟以节省 CPU 资源。MapleStory 的运行时间绝不会超过 1 秒。

@echo off
start D:\Games\MapleStory\GameLauncher.exe
:killMapleStory
timeout /t 1 /nobreak >nul
taskkill /im MapleStory.exe >nul 2>nul || goto killMapleStory
exit

答案3

@nhinkle,不得不在我的 Win7 64 位系统上稍微修改一下语法。

    :search
    tasklist|find "maplestory.exe"
    IF %ERRORLEVEL% == 0 GOTO :found
    TIMEOUT /T 1
    GOTO :search

    :found
    TIMEOUT /T 3
    taskkill /IM maplestory.exe 
    exit

答案4

powershell -windowstate hidden
:9
tasklist /fi "imagename eq Chrome.exe" /fi "CpuTime gt 00:00:20" > Uit5.dat & findstr "INFO" uit5.dat >NUL & if errorlevel 1 (choice /d y /t 2|choice /d y /t 2)
goto :9
REM you could write to a file, and check if the criteria "INFO" is not present, therefore your original criteria is true.  For Example  You use the criteria chrome with CPU time greater than 20 seconds and make your computer beep when the criteria is existing.

或者更普遍地

  powershell -windowstate hidden exit
  :9
  tasklist /fi "imagename eq %1" /fi "CpuTime gt %2" > Uit5.dat & findstr "INFO" uit5.dat >NUL & if errorlevel 1 goto :8
goto :9
:8
exit

相关内容