我試圖找出如何限制一個Windows批處理文件在內的程序執行時間。有沒有像Unix timeout
命令? 請指教。Windows批處理:「超時」命令模擬
回答
我剛剛安裝了Cygwin並使用了unix-style timeout
命令。
我不認爲有超時命令。但是,您可以開始在後臺執行任務並在超時時間內使用ping(使用ping),然後終止任務。
要限制某個程序運行,你可以做這樣的事情
start yourprogram.exe
timeout /t 10
taskkill /im yourprogram.exe /f
啓動yourprogram.exe
,等待10秒時間,然後殺死該程序。
這不是我想要的。Unix'timeout'命令允許限制程序/腳本/命令的執行時間。 –
啊對了,對不起,我以前從未使用過Unix。我已經更新了我的答案,希望能回答你的問題。 –
實際上程序執行可能需要10分鐘到3-4小時。我想限制這個時間到2小時。所以當應用程序在10分鐘內完成時,我不希望批量作業等待1小時50分鐘。有什麼建議麼? –
此代碼等待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)?
。 Sl//凌亂/討厭恕我直言。
你可以代替用此來替換上面的代碼中使用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
)被按下,它將停止倒計時,基本上鎖定直到做出正確的選擇。其次,SPACEBAR不能作爲選擇。
如果我使用不同的啓動和執行時間啓動多個實例,該怎麼辦? –
- 1. 用於unix shell命令替換的WIndows批處理模擬
- 2. 使用標準的Windows命令行/批處理命令模擬unix'cut'
- 3. Hudson - Windows執行windows批處理命令
- 4. windows批處理多行命令?
- 5. 轉義「)」在Windows批處理「的命令
- 6. Windows批處理:find命令和ERRORLEVEL
- 7. windows批處理命令嵌套變量
- 8. 使用Windows批處理命令
- 9. windows批處理/每行多個命令
- 10. windows批處理腳本:捕捉用戶反應爲「超時」命令
- 11. 批處理文件中超時錯誤秒數值的命令
- 12. 使用批處理文件超時沒有回顯命令?
- 13. 使用批處理命令
- 14. 多個批處理命令
- 15. Appserv命令行批處理
- 16. DOS批處理命令
- 17. 批處理命令錯誤
- 18. 批處理命令解釋
- 19. 批處理文件命令
- 20. 管道批處理命令處理
- 21. 批處理文件命令/處理
- 22. 控制何時在hudson中執行windows批處理命令
- 23. DB2命令行處理器超時
- 24. Xero API - 批處理超時
- 25. Windows批處理命令的選擇適用於Windows XP和2003
- 26. 批處理命令只在命令行實施時工作
- 27. cmd中的批處理命令與批處理文件
- 28. 批處理文件顯示批處理命令
- 29. Windows批處理
- 30. 通過批處理文件運行tracert命令時,請查找「請求超時」
「* using ping *」是什麼意思? –
http://stackoverflow.com/a/735294/390913 – perreal