Como fazer um arquivo de lote esperar que um processo comece e continue?

4

Alguém pode me dizer o que eu preciso escrever em [X] para fazer o processo Maplestory.exe ser morto quando ele vai começar? Eu não quero usar comandos de tempo, obrigado! (o gamelauncher.exe faz com que o maplestory.exe seja executado)

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

    
por Erik Avraham 11.07.2013 / 00:49

4 respostas

3

Eu enviaria o resultado de tasklist para find , procuraria por maplestory e usaria uma instrução IF e um GOTO para continuar o looping, verificando esse processo até que ele seja encontrado. Uma vez encontrado, você pode GOTO um ponto diferente para matar a tarefa.

Algo como isso deve fazer o truque:

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

:found
taskkill /im maplestory.exe

(O comando TIMEOUT pausa o script por 1 segundo. Isso ajudará a evitar que ele sugue muito a CPU que está constantemente executando esse loop.)

    
por 11.07.2013 / 01:21
0

Por que você precisa executar alguma coisa? Você pode simplesmente tentar finalizar o processo a qualquer momento e, em seguida, executar uma ação após o sucesso ( && operator) ou falha ( || operator). Você pode simplesmente fazer um loop via GOTO até alcançar o sucesso.

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

Você pode querer introduzir um atraso de 1 segundo no loop apenas para conservar os recursos da CPU. O MapleStory nunca será executado por mais de ~ 1 segundo.

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

@nhinkle, tive que modificar a sintaxe um pouco no meu sistema Win7 de 64 bits.

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

    :found
    TIMEOUT /T 3
    taskkill /IM maplestory.exe 
    exit
    
por 18.10.2018 / 22:31
-2
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.

Ou Mais geralmente

  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
    
por 11.09.2016 / 01:04