2

У меня есть командный файл, который вызывает внешнюю программу, которая периодически зависает. То, что я хотел бы сделать, это установить ограничение времени для командного файла / приглашения CMD таким образом, чтобы оно автоматически закрывалось по истечении определенного периода времени. Один из уловов заключается в том, что внешняя программа, которая зависает, может иметь один или несколько экземпляров, запущенных в данное время, и я хочу, чтобы только пакетный файл, превышающий свое ограничение по времени, закрыл экземпляр программы, запущенный пакетом. Как я могу сделать это? В идеале решение будет работать на Windows XP, Vista и 7.

2 ответа2

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%

ping -n 2 -w 1 127.0.0.1 сделает паузу почти ровно на 1 секунду (промежуток времени между двумя пингами)
Это работает на XP, так как choice не включен в XP

-1

Написать эту партию:

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

Поместите это в цикл, если требуется.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .