批處理編程的異類——時鐘(Clock)
1、暫停(Pause)、延遲(Delay)、等待(Wait)、睡眠(Sleep)
1)for+set+if,時間精度為0.01秒,適用平臺為WinNT/2K/XP/2003。
利用for解析變量%time%并存為兩個時間點%start%和%now%,再利用set /a計算兩個時間點的時間差,最后用if判斷時間差是否達到設定的暫停時間。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
setlocal enableextensions
echo %time%
call :ProcDelay 200
echo %time%
goto :EOF
:ProcDelay delayMSec_
setlocal enableextensions
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
:_procwaitloop
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
set /a diff_=%now_%-%start_%
if %diff_% LSS %1 goto _procwaitloop
endlocal & goto :EOF
2)VBS腳本中的sleep函數(shù),時間精度為0.001秒,使用平臺為Win9x/WinNT系列。
動態(tài)創(chuàng)建一個調用sleep()函數(shù)的VBS腳本,然后用Windows腳本宿主的命令行版本cscript調用它。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off & setlocal enableextensions enabledelayedexpansion
echo WScript.Sleep 2000 > %temp%\tmp$$$.vbs
echo %time%
cscript //nologo %temp%\tmp$$$.vbs
echo %time%
for %%f in (%temp%\tmp$$$.vbs) do if exist %%f del %%f
endlocal & goto :EOF
3)ping的消息發(fā)送間隔,時間精度為1秒,使用平臺為Win9x/WinNT系列。
需要你的Windows系統(tǒng)中正常安裝了網卡的TCP/IP協(xié)議,有兩種方案,方案二不建議采用,見主題 [討論]批處理編程的異類 12、13樓:
(1) 利用ping兩次發(fā)送消息之間的間隔時間。ping在發(fā)送多個消息時,在得到上一次消息的回應后,它會再等待1秒的時間才發(fā)送下一次消息,而這個回應時間因機型、系統(tǒng)和網絡配置而不同,其中IP地址尤其關鍵,只有本地的回送地址 127.0.0.1 因為是立即回應所以才是相對恒定的,其他地址大多會產生顯著的差異。此種方法要等待更大的時間,是指定發(fā)送的消息數(shù)為等待的時間加一,因為第一個消息是不等待的,IP 地址必須是 127.0.0.1 。其等待2秒的程序如下:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
::根據植樹原則,n后的數(shù)字為暫停秒數(shù)加一
ping -n 3 127.0.0.1>nul
(2) 利用ping的最大等待時間。ping向0.0.0.1發(fā)送一次“網際消息控制協(xié)議 (ICMP)”回響請求消息,因為 0.0.0.1 是個無法響應 ping 請求的IP地址,所以默認情況下,ping會等待一定的最大響應時間——4秒后便停止等待,而-w可以改變這個每發(fā)送一次消息所等待的最大響應時間。而如果將 IP 地址改為立即響應的127.0.0.1或其他響應時間很短的IP ,那 -w 便失去了作用,因為每次發(fā)送等待時間都不會達到最大的響應時間,此時延時會縮短。此種方法要等待更大的時間,可以直接使用 -w 指定,但是需要減去一定的發(fā)送延時,這個延時需要自己事先測定一下,否則會有不到1秒的誤差;而且 IP 地址必須是不響應請求的地址。其等待2秒的程序如下:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
ping -n 2 -w 500 0.0.0.1>nul
4)choice的缺省選擇等待功能,時間精度為1秒,適用平臺為MS-DOS/Win9x/WinNT系列。
/t:y,2 將缺省選擇字符設置為y,等待時間是2秒,/n禁止[y,n]提示出現(xiàn)在命令行上,“rem|”的作用是禁止choice從鍵盤接受按鍵,從而暫停不會因為按下y或者其它鍵而被意外終止。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
rem|choice /t:y,2 /n >nul
5)ASCII匯編代碼,延遲精度為0.001秒,適用平臺為MS-DOS/Win9x/WinNT。
德國人Herbert Kleebauer給出了一個通用方案,通過ASCII匯編器間接產生一個sleep.exe程序來實現(xiàn)延遲,這個程序分為DOS和Win兩個模塊,分別調用DOS系統(tǒng)中斷服務和WindowsAPI。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
舊一篇:批處理命令之Start的詳細用法
查看最新精華文章 請訪問博客首頁相關文章
使用批處理ping ip段內主機DOS延時實現(xiàn)批處理for中如何實現(xiàn)break完美的Dos批處理實現(xiàn)sleep用批處理寫的:數(shù)據庫備份還原工具用批處理刪除7天以前的備份文件批處理批處理使用心得