【日期時間】批處理中的延時

 http://www.cn-dos.net/forum/viewthread.php?tid=8905#pid54227

 

【方案一】for+set+if,時間精度爲0.01秒,適用平臺爲WinNT/2K/XP/2003。

 

利用for解析變量%time%並存爲兩個時間點%start%和%now%,再利用set /a計算兩個時間點的時間差,最後用if判斷時間差是否達到設定的暫停時間。

 

 

【方案二】VBS腳本中的sleep函數,時間精度爲0.001秒,使用平臺爲 Win9x/WinNT系列。

 

動態創建一個調用sleep()函數的VBS腳本,然後用Windows腳本宿主的命令行版本cscript調用它。

 

 

【方案三】ping的消息發送間隔,時間精度爲1秒,使用平臺爲 Win9x/WinNT系列。

 

需要你的Windows系統中正常安裝了網卡的TCP/IP協議,有兩種方案,方案二不建議採用,見主題 [討論]批處理編程的異類 12、13樓:

 

(1) 利用ping兩次發送消息之間的間隔時間。ping在發送多個消息時,在得到上一次消息的迴應後,它會再等待1秒的時間才發送下一次消息,而這個迴應時間因機型、系統和網絡配置而不同,其中IP地址尤其關鍵,只有本地的回送地址 127.0.0.1 因爲是立即迴應所以纔是相對恆定的,其他地址大多會產生顯著的差異。此種方法要等待更大的時間,是指定發送的消息數爲等待的時間加一,因爲第一個消息是不等待的,IP 地址必須是 127.0.0.1 。其等待2秒的程序如下:

 

(2) 利用ping的最大等待時間。ping向0.0.0.1發送一次“網際消息控制協議 (ICMP)”迴響請求消息,因爲 0.0.0.1 是個無法響應 ping 請求的IP地址,所以默認情況下,ping會等待一定的最大響應時間——4秒後便停止等待,而-w可以改變這個每發送一次消息所等待的最大響應時間。而如果將 IP 地址改爲立即響應的127.0.0.1或其他響應時間很短的IP ,那 -w 便失去了作用,因爲每次發送等待時間都不會達到最大的響應時間,此時延時會縮短。此種方法要等待更大的時間,可以直接使用 -w 指定,但是需要減去一定的發送延時,這個延時需要自己事先測定一下,否則會有不到1秒的誤差;而且 IP 地址必須是不響應請求的地址。其等待2秒的程序如下:

 

 

【方案四】choice 的缺省選擇等待功能,時間精度爲1秒,適用平臺爲MS-DOS/Win9x/WinNT系列。

 

/t:y,2 將缺省選擇字符設置爲y,等待時間是2秒,/n禁止[y,n]提示出現在命令行上,“rem|”的作用是禁止choice從鍵盤接受按鍵,從而暫停不會因爲按下y或者其它鍵而被意外終止。

 

 

【方案五】ASCII彙編代碼,延遲精度爲 0.001秒,適用平臺爲MS-DOS/Win9x/WinNT。

 

德國人Herbert Kleebauer給出了一個通用方案,通過ASCII彙編器間接產生一個sleep.exe程序來實現延遲,這個程序分爲DOS和Win兩個模塊,分別調用DOS系統中斷服務和WindowsAPI。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章