我试图找出如何在Windows批处理文件中限制程序的执行时间。 有什么样的Unix timeout
命令? 请指教。
Answer 1:
要限制某个程序运行,你可以做这样的事情的时候
start yourprogram.exe
timeout /t 10
taskkill /im yourprogram.exe /f
启动yourprogram.exe
,等待10秒钟,然后杀死该程序。
Answer 2:
我刚安装的Cygwin和使用UNIX风格timeout
从分发命令。
Answer 3:
我不认为这是一个超时命令。 但是,您可以在后台启动和睡眠(使用ping)执行任务的超时持续时间然后杀死任务。
Answer 4:
此代码等待60秒,然后检查是否%ProgramName中%正在运行。
为了增加这个时候,改变的价值WaitForMinutes
。
为了减少检查之间的间隔,设置WaitForSeconds
为你想让它等待的秒数。
@echo off
set ProgramName=calc.exe
set EndInHours=2
:: How Many Minutes in between each check to see if %ProgramName% is Running
:: To change it to seconds, just set %WaitForSeconds% Manually
set WaitForMinutes=1
set /a WaitForSeconds=%WaitForMinutes%*60
:: How many times to loop
set /a MaxLoop=(%EndInHours%*60*60) / (%WaitForMinutes%*60)
REM Use a VBScript popup window asking to terminate %ProgramName%
echo set WshShell = WScript.CreateObject("WScript.Shell") > %tmp%\tmp.vbs
echo Wscript.Quit (WshShell.Popup( "Click 'OK' to terminate %ProgramName%." ,10 ,"Terminate %ProgramName%", 0)) >> %tmp%\tmp.vbs
start %ProgramName%
set running=True
:: Give time for %ProgramName% to launch.
timeout /t 5 /nobreak > nul
setlocal enabledelayedexpansion
for /l %%x in (1,1,%MaxLoop%) do (
if "!running!"=="True" for /l %%y in (1,1,%WaitForMinutes%) do (
if "!running!"=="True" (
set running=False
REM call Pop-Up
cscript /nologo %tmp%\tmp.vbs
if !errorlevel!==-1 (
for /f "skip=3" %%x in ('tasklist /fi "IMAGENAME EQ %ProgramName%"') do set running=True
) else (
taskkill /im %ProgramName%
)
)
)
)
if exist %tmp%\tmp.vbs del %tmp%\tmp.vbs
此代码使用VBScript来使弹出框。 点击OK
会引起%ProgramName中%通过被杀害taskkill
。
如果你不想使用弹出窗口,你可以使用timeout
通过移除...
REM Use a VBScript popup window asking to terminate %ProgramName%
echo set WshShell = WScript.CreateObject("WScript.Shell") > %tmp%\tmp.vbs
echo Wscript.Quit (WshShell.Popup( "Click 'OK' to terminate %ProgramName%." ,10 ,"Terminate %ProgramName%", 0)) >> %tmp%\tmp.vbs
......和更换此...
REM call Pop-Up
cscript /nologo %tmp%\tmp.vbs
if !errorlevel!==-1 (
...有了这个:
REM Use CTRL+C to kill %ProgramName%
timeout /t %WaitForSeconds% /nobreak
if !errorlevel!==0 (
使用/nobreak
因为是必要timeout
不按下一个键或超时之间进行区分。 这将允许您通过按CTRL + C来终止%ProgramName中%,但会要求您的批处理文件要求Terminate batch job (Y/N)?
当你这样做。 马虎/脏乱/讨厌恕我直言。
你也可以使用CHOICE
用此来替换上面的代码:
REM Using choice, but choice can get stuck with a wrong keystroke
Echo [K]ill %ProgramName% or [S]imulate %WaitForSeconds% Seconds
Choice /n /c sk /t %WaitForSeconds% /d s
if !errorlevel!==1 (
但选择带来了一组自己的限制表中的。 一方面,它会停止倒计时,如果这是不是中了关键的选择(在这种情况下s
和k
)已被按下,基本锁定了,直到正确的做出选择。 其次, 空格键也不能选择。
文章来源: Windows batch: analogue for `timeout` command