我有一个批处理文件,它调用一个定期挂起的外部程序。我想要做的是设置批处理文件/ CMD 提示符的时间限制,使其在一定时间后自动关闭。一个问题是,挂起的外部程序可能在给定时间运行一个或多个实例,我只希望批处理文件达到其时间限制以关闭由批处理触发的程序实例。我该如何实现这一点?理想情况下,解决方案可以在 Windows XP、Vista 和 7 上运行。
答案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 秒(两次 ping 之间的时间量)
这在 XP 上有效,因为choice
XP 中不包含
答案2
写这个批次:
@echo off
choice /t <waiting time in seconds> /d y
taskkill /im <process name> /f /fi "status eq not responding"
如果需要的话,将其放入循环中。