今日偶尔看到某牛写的一本《批处理编程教程》,没想到批处理竟然可以折腾出这么多花样来。其中关于延时问题介绍得不太详细,本着“百度一下,你就甚么都明白了”的精神,俺百度了一下,结果发现这问题果然有很多解。总的来说大概有:
1.用ping
2.用vbs(cscript, wscript)
3.用choice(xp之后已不可用)
4.用mshta
5.用msg
这些方法各有优缺点。俺一时手痒,也写了一段延迟程序,没用甚么奇巧淫技,只用了内部命令,误差在10ms以内,但CPU占用率相当高,代码如下:- @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
复制代码
|