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