Windows?Bat實(shí)現(xiàn)延時(shí)功能的幾種常見方式小結(jié)
在 bat
批處理中實(shí)現(xiàn)延時(shí)功能的幾種常用方式
1. 使用ping命令實(shí)現(xiàn)延時(shí)
使用ping命令可以實(shí)現(xiàn)延時(shí)的效果,命令如下:
ping 127.0.0.1 -n 11 >nul
-n
指定ping
的次數(shù),每次大概間隔1s,>nul
將ping
過程回顯信息給屏蔽ping
命令實(shí)現(xiàn)的延時(shí),時(shí)間精度:大約1s,內(nèi)存占用:ping
命令所占用空間
注意閉坑:ping 從第1次發(fā)出請(qǐng)求到接收到回顯數(shù)據(jù)幾乎是瞬間的,所以你如果想實(shí)現(xiàn)10秒的延時(shí),需要設(shè)置-n 為11(至少針對(duì)ping 127.0.0.1 回環(huán)地址是這樣),網(wǎng)上很多說需要多少秒,-n參數(shù)值就設(shè)置多少秒, 真是有些誤人子弟呢!
我還從網(wǎng)上看到過使用-w
參數(shù),指定超時(shí)等待時(shí)間來作為延時(shí)時(shí)間的,這不是可能,除非指定的地址ping不通,否則這個(gè)延時(shí)實(shí)現(xiàn)根本不可靠
可以通過下邊的腳本,驗(yàn)證下-n
到底應(yīng)該設(shè)置多少
@echo off echo s_time:%time% ping -n 1 127.0.0.1 > nul echo e_time:%time% echo s_time2:%time% ping -n 2 127.0.0.1 > nul echo e_time2:%time% pause
輸出結(jié)果:
可以看出,網(wǎng)上那些說【需要延時(shí)多少秒,-n
就設(shè)置多少秒】的人,是有多誤人子弟了。不過當(dāng)-n
指定的值越大,最終的延時(shí)誤差就越大,最終可能也不在乎這1秒的誤差了,你可以嘗試將-n
設(shè)置為較大值驗(yàn)證下。
(這個(gè)誤差實(shí)際上與你ping
的地址有很大關(guān)系)
然后再通過一個(gè)腳本,驗(yàn)證下-w
參數(shù),對(duì)應(yīng)延時(shí)等待是否有效
@echo off echo s_time:%time% ping -n 10 -w 5000 127.0.0.1 > nul echo e_time:%time% pause
按網(wǎng)上錯(cuò)誤的說法,這里的結(jié)果應(yīng)該為延時(shí) 10*5000/1000=50 秒;從測(cè)試結(jié)果看,實(shí)際上延時(shí)大概只有(10-1)秒;-w
指定的值未生效,如果你能保證被ping的地址每次都是超時(shí)(注意不是ping不通)-w
參數(shù)指定的時(shí)間才會(huì)作用到延時(shí)效果中
2. 使用timeout命令實(shí)現(xiàn)延時(shí)
使用timeout命令也可以實(shí)現(xiàn)延時(shí)的效果,命令如下:
timeout /t 5 /nobreak >nul
/t
指定等待的描述,有效范圍-1
到99999
秒,-1
表示無限期的等待/nobreak
表示忽略按鍵并等待指定時(shí)間,唯一能接收的按鍵是Ctrl+Z
組合鍵,如果等待時(shí)間未到,按Ctrl+Z
鍵將終止批處理程序,timeout
后續(xù)的命令也不在執(zhí)行timeout
命令實(shí)現(xiàn)的延時(shí),除-1
無限等待外,單次最大延時(shí)99999
秒,不過你可以多次調(diào)用timeout
命令來實(shí)現(xiàn)超過這個(gè)限制的延時(shí)等待timeout
命令實(shí)現(xiàn)的延時(shí),時(shí)間精度:大約1s,內(nèi)存占用:timeout
命令所占用空間
3. 使用choice命令實(shí)現(xiàn)延時(shí)
使用choice命令也可以實(shí)現(xiàn)延時(shí)的效果,命令如下:
choice /C yn /T 10 /D y >nul
/C
指定選項(xiàng)列表,/T
指定做出默認(rèn)選擇之前,等待的時(shí)間,可接受的值0-9999
,/D
超過等待時(shí)間后,默認(rèn)選擇項(xiàng);choice
命令實(shí)現(xiàn)的延時(shí),單次最大延時(shí)9999
秒,不過你可以多次調(diào)用choice
命令來實(shí)現(xiàn)超過這個(gè)限制的延時(shí)等待;choice
命令實(shí)現(xiàn)的延時(shí),時(shí)間精度:大約1s,內(nèi)存占用:chocie
命令所占用空間
4. 使用for循環(huán)實(shí)現(xiàn)延時(shí)
使用for
循環(huán)也可以實(shí)現(xiàn)延時(shí)的效果,確切的來說是使用for
循環(huán)+ping
/timeout
/choice
組合,來實(shí)現(xiàn)延時(shí)的效果。
實(shí)現(xiàn)100s延時(shí),命令如下:
::for+ping組合 for /l %%i in (1,1,10) do @echo %%i & ping -n 11 127.0.0.1 >nul ::for+timeout組合 for /l %%i in (1,1,10) do @echo %%i & timeout /t 10 >nul ::for+choice組合 for /l %%i in (1,1,10) do @echo %%i & choice /C yn /T 10 /D y >nul
for
+ping
/timeout
/choice
組合的方式,可以靈活的組合出你想要的延時(shí)時(shí)間,而不受timeout
/choice
單次最大延時(shí)的限制;ping
命令想要延時(shí)m
秒,則-n
參數(shù)值需設(shè)置為m+1
,因?yàn)槭状伟l(fā)出ping
請(qǐng)求到接收到值幾乎是瞬時(shí)的;
對(duì)于這種組合命令的延時(shí),我建議盡可能將for
的循環(huán)次數(shù)設(shè)置較小,而循環(huán)體內(nèi)具體實(shí)現(xiàn)延時(shí)任務(wù)的命令對(duì)應(yīng)的參數(shù)值設(shè)置盡可能大。因?yàn)槲依斫饷看窝h(huán),相當(dāng)于重新啟動(dòng)了ping
/timeout
/choice
的程序,而每次啟動(dòng)程序勢(shì)必會(huì)耗費(fèi)一定的時(shí)間,當(dāng)循環(huán)次數(shù)較多時(shí),這個(gè)啟動(dòng)時(shí)間帶來的影響將是比較大的。
(在我本地測(cè)試,使用for
+ping
組合命令,同樣實(shí)現(xiàn)100s延時(shí),for
循環(huán)1次+ping -n 101
實(shí)際耗時(shí)大約101s,而 for
循環(huán)100次+ping -n 2
實(shí)際耗時(shí)大約102s,后者比前者多出大約1s)
5. 使用sleep命令實(shí)現(xiàn)延時(shí)
Windows batch
中沒有原生的sleep
命令,需要借助第三方工具。
下載sleep.exe
curl https://www.computerhope.com/download/utility/sleep.exe > sleep.exe
將下載好的sleep.exe
程序,放到C:\Windows\System32
或其他在PATH
環(huán)境變量中的路徑,即可全局使用。
實(shí)現(xiàn)延時(shí)10s,使用比較簡(jiǎn)單:
sleep 10
時(shí)間精度:1毫秒
內(nèi)存占用:sleep命令本身很小
6. 使用VBScript.sleep實(shí)現(xiàn)延時(shí)
在批處理中,可以通過調(diào)用vbscript
的方式實(shí)現(xiàn)延時(shí)功能
1)創(chuàng)建一個(gè)vbs腳本文件(如 delay.vbs),內(nèi)容如下:
WScript.Sleep WScript.Arguments.Item(0)
2)在批處理腳本中調(diào)用這個(gè)vbscript
,實(shí)現(xiàn)延時(shí)
cscript //nologo delay.vbs 1000 >nul
表示在調(diào)用delay.vbs腳本時(shí)傳入?yún)?shù)1000,表示等待1000毫秒,即1秒鐘。
時(shí)間精度:1毫秒;內(nèi)存占用:vbs腳本本身并不大,執(zhí)行vbs的
cscript
/wscript
進(jìn)程大概占用1MB內(nèi)存;調(diào)用vbs腳本,還可以使用
wscript
命令,如wscript delay.vbs 1000 >nul
需要注意腳本文件和批處理腳本文件的路徑問題
你也可以使用臨時(shí)vbscript腳本的方式避免路徑問題,具體如下:
echo WScript.Sleep WScript.Arguments.Item(0) > delay.vbs cscript //nologo delay.vbs 1000 >nul && del delay.vbs
即在批處理文件當(dāng)前路徑下生成vbs,用完就刪除。
總結(jié)
- 除了
sleep.exe
是第三方工具,需要下載安裝,其余都是Windows自帶的,可以直接使用; - 一般來說,使用
ping
命令或timeout
命令即可,但如果若要獲得更精確的延時(shí)時(shí)間,可以優(yōu)先考慮VBScript.sleep
方案; - 雖然
ping
命令可能是最常用的,但是當(dāng)需要延遲的時(shí)間較長(zhǎng)時(shí),它的誤差會(huì)越來越多,timeout
/choice
會(huì)比它好很多
到此這篇關(guān)于Windows Bat實(shí)現(xiàn)延時(shí)功能的幾種常見方式小結(jié)的文章就介紹到這了,更多相關(guān)Bat 延時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
批處理自動(dòng)登錄QQ小結(jié)及相關(guān)討論
QQ在傳輸密碼的時(shí)候,先做一次MD5加密,再做一次BASE64變換,這樣可以得到正常的文本信息以便網(wǎng)絡(luò)傳輸。2011-01-01Windows下使用批處理實(shí)現(xiàn)啟動(dòng)關(guān)閉mysql
這篇文章主要介紹了Windows下使用批處理實(shí)現(xiàn)啟動(dòng)關(guān)閉mysql,其主要核心思想是將mysql注冊(cè)成為windows下的服務(wù),推薦給大家,有需要的下伙伴可以參考下,其實(shí)很多的php集成環(huán)境都是這么實(shí)現(xiàn)的。2015-03-03Bootcfg 配置、查詢或更改 Boot.ini 文件設(shè)置
Bootcfg 配置、查詢或更改 Boot.ini 文件設(shè)置...2007-09-09在網(wǎng)上找的創(chuàng)建《CMD命令速查手冊(cè)》的批處理
在網(wǎng)上找的創(chuàng)建《CMD命令速查手冊(cè)》的批處理,這個(gè)批處理可以生成CMD命令速查手冊(cè),喜歡的朋友可以參考下。2011-01-01