Como posso definir um limite de tempo em um arquivo de lote?

2

Eu tenho um arquivo em lotes que chama um programa externo que trava periodicamente. O que eu gostaria de fazer é definir um limite de tempo no prompt do arquivo de lote / CMD de modo que ele feche automaticamente após um determinado período de tempo. Um problema é que o programa externo que trava pode ter uma ou mais instâncias em execução em um determinado momento, e eu quero apenas que o arquivo em lote atinja seu limite de tempo para fechar a instância do programa acionado pelo lote. Como posso fazer isso? Idealmente, uma solução funcionaria no Windows XP, Vista e 7.

    
por russellpierce 27.06.2012 / 09:26

2 respostas

1
REM start the program as quickly as possible to avoid other processes starting
tasklist > file1.txt & start notepad.exe & tasklist > file2.txt
REM Find the PID of the program we just started
for /f "tokens=2" %%a in ('fc file1.txt file2.txt^|find "notepad.exe"') do set PID=%%a
REM delay for 5 seconds
FOR /l %%a in (5,-1,1) do (Echo closing in %%as&ping -n 2 -w 1 127.0.0.1>NUL)
REM delete the program using it's PID
tskill %PID%

o ping -n 2 -w 1 127.0.0.1 fará uma pausa por quase exatamente 1 segundo (a quantidade de tempo entre dois pings)
Isso funciona no XP, já que choice não está incluído no XP

    
por 27.06.2012 / 22:50
-1

Escreva este lote:

@echo off    
choice /t <waiting time in seconds> /d y
taskkill /im <process name> /f /fi "status eq not responding"

Coloque isso em um loop, se necessário.

    
por 27.06.2012 / 13:32