1、利用ping命令實(shí)現(xiàn)延時(shí),方法巧妙而且可以控制,但精度不高。
如:ping -n 3 127.0.0.1>nul大約可以停頓2秒
-n后的數(shù)字是發(fā)送包的數(shù)目,為暫停秒數(shù)加一。此法每秒有0.5%的偏差,時(shí)間精度為1秒。
@echo off @ping 127.0.0.1 -n 6 >nul start gdh.txt
2、用vbs腳本中的sleep實(shí)現(xiàn),樣本代碼如下:
缺點(diǎn):生成臨時(shí)文件
優(yōu)點(diǎn):時(shí)間精度為0.001秒,精度高
例子1、vbs cscript
例子2、vbs start /wait
@echo off echo wscript.sleep 5000>sleep.vbs start /wait sleep.vbs start gdh.txt del /f /s /q sleep.vbs
---------------------------------------
以上程序代碼可以實(shí)現(xiàn)暫停2秒,2秒過(guò)后回顯OK!
3、利用“死”循環(huán):設(shè)定一個(gè)時(shí)間差,如果當(dāng)前時(shí)間與設(shè)定時(shí)間之差不大于設(shè)定之時(shí)間差,則不退出該循環(huán),從而達(dá)到延時(shí)的目的。樣本代碼:
---------------------------------------------------
4:choice
優(yōu)點(diǎn):時(shí)間精確,CPU占用低,是最佳選擇
@echo off choice /t 5 /d y /n >nul start gdh.txt
5:for+set+if,時(shí)間精度為0.01秒
缺點(diǎn):CPU占用高,語(yǔ)句過(guò)長(zhǎng),不常用
@echo off setlocal enableextensions echo %time% call :ProcDelay 500 echo %time% start gdh.txt :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
6、利用at命令。不過(guò)此方法與其說(shuō)是延時(shí),還不如說(shuō)成定時(shí)的好。
5、
下面是其它網(wǎng)友的補(bǔ)充:
【方案一】for+set+if,時(shí)間精度為0.01秒,適用平臺(tái)為WinNT/2K/XP/2003。
利用for解析變量%time%并存為兩個(gè)時(shí)間點(diǎn)%start%和%now%,再利用set /a計(jì)算兩個(gè)時(shí)間點(diǎn)的時(shí)間差,最后用if判斷時(shí)間差是否達(dá)到設(shè)定的暫停時(shí)間。
: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
【方案二】VBS腳本中的sleep函數(shù),時(shí)間精度為0.001秒,使用平臺(tái)為 Win9x/WinNT系列。
動(dòng)態(tài)創(chuàng)建一個(gè)調(diào)用sleep()函數(shù)的VBS腳本,然后用Windows腳本宿主的命令行版本cscript調(diào)用它。
【方案三】ping的消息發(fā)送間隔,時(shí)間精度為1秒,使用平臺(tái)為 Win9x/WinNT系列。
需要你的Windows系統(tǒng)中正常安裝了網(wǎng)卡的TCP/IP協(xié)議,有兩種方案,方案二不建議采用,見(jiàn)主題 [討論]批處理編程的異類 12、13樓:
(1) 利用ping兩次發(fā)送消息之間的間隔時(shí)間。ping在發(fā)送多個(gè)消息時(shí),在得到上一次消息的回應(yīng)后,它會(huì)再等待1秒的時(shí)間才發(fā)送下一次消息,而這個(gè)回應(yīng)時(shí)間因機(jī)型、系統(tǒng)和網(wǎng)絡(luò)配置而不同,其中IP地址尤其關(guān)鍵,只有本地的回送地址 127.0.0.1 因?yàn)槭橇⒓椿貞?yīng)所以才是相對(duì)恒定的,其他地址大多會(huì)產(chǎn)生顯著的差異。此種方法要等待更大的時(shí)間,是指定發(fā)送的消息數(shù)為等待的時(shí)間加一,因?yàn)榈谝粋€(gè)消息是不等待的,IP 地址必須是 127.0.0.1 。其等待2秒的程序如下:
(2) 利用ping的最大等待時(shí)間。ping向0.0.0.1發(fā)送一次“網(wǎng)際消息控制協(xié)議 (ICMP)”回響請(qǐng)求消息,因?yàn)?0.0.0.1 是個(gè)無(wú)法響應(yīng) ping 請(qǐng)求的IP地址,所以默認(rèn)情況下,ping會(huì)等待一定的最大響應(yīng)時(shí)間——4秒后便停止等待,而-w可以改變這個(gè)每發(fā)送一次消息所等待的最大響應(yīng)時(shí)間。而如果將 IP 地址改為立即響應(yīng)的127.0.0.1或其他響應(yīng)時(shí)間很短的IP ,那 -w 便失去了作用,因?yàn)槊看伟l(fā)送等待時(shí)間都不會(huì)達(dá)到最大的響應(yīng)時(shí)間,此時(shí)延時(shí)會(huì)縮短。此種方法要等待更大的時(shí)間,可以直接使用 -w 指定,但是需要減去一定的發(fā)送延時(shí),這個(gè)延時(shí)需要自己事先測(cè)定一下,否則會(huì)有不到1秒的誤差;而且 IP 地址必須是不響應(yīng)請(qǐng)求的地址。其等待2秒的程序如下:
【方案四】choice 的缺省選擇等待功能,時(shí)間精度為1秒,適用平臺(tái)為MS-DOS/Win9x/WinNT系列。
/t:y,2 將缺省選擇字符設(shè)置為y,等待時(shí)間是2秒,/n禁止[y,n]提示出現(xiàn)在命令行上,“rem|”的作用是禁止choice從鍵盤(pán)接受按鍵,從而暫停不會(huì)因?yàn)榘聪聐或者其它鍵而被意外終止。
【方案五】ASCII匯編代碼,延遲精度為 0.001秒,適用平臺(tái)為MS-DOS/Win9x/WinNT。
德國(guó)人Herbert Kleebauer給出了一個(gè)通用方案,通過(guò)ASCII匯編器間接產(chǎn)生一個(gè)sleep.exe程序來(lái)實(shí)現(xiàn)延遲,這個(gè)程序分為DOS和Win兩個(gè)模塊,分別調(diào)用DOS系統(tǒng)中斷服務(wù)和WindowsAPI。
標(biāo)簽:常德 青島 煙臺(tái) 迪慶 連云港 南平 興安盟 廣安
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《批處理 延時(shí)不完全總結(jié)》,本文關(guān)鍵詞 批處理,延時(shí),不完全,總結(jié),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。