
[分享]批處理延時今日偶爾看到某牛寫的一本《批處理編程教程》,沒想到批處理竟然可以折騰出這么多花樣來。其中關于延時問題介紹得不太詳細,本著“百度一下,你就甚么都明白了”的精神,俺百度了一下,結果發現這問題果然有很多解??偟膩碚f大概有:1.用ping2.用vbs(cscript, wscript)3.用choice(xp之后已不可用)4.用mshta5.用msg 這些方法各有優缺點。俺一時手癢,也寫了一段延遲程序,沒用甚么奇巧淫技,只用了內部命令,誤差在10ms以內,但CPU占用率相當高,代碼如下:
nclick="copycode($('code0'));">復制代碼
- @rem 批處理延遲子程序(注:最多延時不超過24小時)
- @echo off
- rem 設置變量延遲
- setlocal enabledelayedexpansion
- :delay
- if x%1==x (
- echo 用法:delay xxxx
- echo 其中:xxxx為需要延遲的毫秒數
- echo.
- echo 例如延遲5秒:delay 5000
- goto end
- )
- set /a delta=%1
- set t0=%time%
- echo 開始時間:%t0%
- set st=%t0:~0,1%
- rem 檢查當前時間第1位是否為空格
- if not defined st (
- set /a hour=%t0:~1,1%
- ) else (
- set /a hour=%t0:~0,2%
- )
- set /a min=1%t0:~3,2%-100
- set /a sec=1%t0:~6,2%-100
- set /a ms=(1%t0:~9,2%-100)*10
- rem N0存放初始時間(以毫秒為單位)
- set /a N0=ms+sec*1000+min*60*1000+hour*60*60*1000
- rem 開始折騰,折騰一次不超過2ms,但time的精度為10ms,所以本程序的精度不超過10ms
- :loop
- set t0=%time%
- set st=%t0:~0,1%
- rem 檢查當前時間第1位是否為空格
- if not defined st (
- set /a hour1=%t0:~1,1%
- ) else (
- set /a hour1=%t0:~0,2%
- )
- if hour1 lss hour (
- set /a hour=24+hour1
- ) else (
- set /a hour=hour1
- )
- set /a min=1%t0:~3,2%-100
- set /a sec=1%t0:~6,2%-100
- set /a ms=(1%t0:~9,2%-100)*10
- rem N2存放當前時間(以毫秒為單位)
- set /a N2=ms+sec*1000+min*60*1000+hour*60*60*1000
- rem deltax為當前時間與初始時間之差(以毫秒為單位)
- set /a deltax=N2-N0
- if %deltax% lss %delta% goto loop
- echo 結束時間:%time%
- rem 作為一個單獨批處理程序時,可以不要以下語句
- goto :eof
- rem 程序結束處標記
- :end

