批处理等待/延迟/暂停
1、暂停(Pau)、延迟(Delay)、等待(Wait)、睡眠(Sleep)
1)for+t+if,时间精度为0.01秒,适用平台为WinNT/2K/XP/2003。
利用for解析变量%time%并存为两个时间点%start%和%now%,再利用t/a计算两
个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。
@echooff
tlocalenableextensions
echo%time%
call:ProcDelay200
echo%time%
goto:EOF
:ProcDelaydelayMSec_
tlocalenableextensions
for/f"tokens=1-4delims=:."%%hin("%time%")dotstart_=%%h%%i%%j%%k
:_procwaitloop
for/f"tokens=1-4delims=:."%%hin("%time%")dotnow_=%%h%%i%%j%%k
t/adiff_=%now_%-%start_%
if%diff_%LSS%1goto_procwaitloop
endlocal&goto:EOF
2)VBS脚本中的sleep函数,时间精度为0.001秒,使用平台为Win9x/WinNT系列。
动态创建一个调用sleep()函数的VBS脚本,然后用Windows脚本宿主的命令行版本
cscript调用它。
@echooff&tlocalenableextensionnabledelayedexpansion
2000>%temp%tmp$$$.vbs
echo%time%
cscript//nologo%temp%tmp$$$.vbs
echo%time%
for%%fin(%temp%tmp$$$.vbs)doifexist%%fdel%%f
endlocal&goto:EOF
3)ping的消息发送间隔,时间精度为1秒,使用平台为Win9x/WinNT系列。
需要你的Windows系统中正常安装了网卡的TCP/IP协议,有两种方案:
(1)利用ping两次发送消息之间的间隔时间。ping在发送多个消息时,在得到上一次
消息的回应后,它会再等待1秒的时间才发送下一次消息,而这个回应时间因机型、系统和
网络配置而不同,其中IP地址尤其关键,只有本地的回送地址127.0.0.1因为是立即回应
所以才是相对恒定的,其他地址大多会产生显著的差异。此种方法要等待更大的时间,是指
定发送的消息数为等待的时间加一,因为第一个消息是不等待的,IP地址必须是
127.0.0.1。其等待2秒的程序如下:
::根据植树原则,n后的数字为暂停秒数加一
ping-n3127.0.0.1>nul
(2)利用ping的最大等待时间。ping向0.0.0.1发送一次“网际消息控制协议(ICMP)”回响
请求消息,因为0.0.0.1是个无法响应ping请求的IP地址,所以默认情况下,ping会等待
一定的最大响应时间——4秒后便停止等待,而-w可以改变这个每发送一次消息所等待的
最大响应时间。而如果将IP地址改为立即响应的127.0.0.1或其他响应时间很短的IP,那
-w便失去了作用,因为每次发送等待时间都不会达到最大的响应时间,此时延时会缩短。
此种方法要等待更大的时间,可以直接使用-w指定,但是需要减去500毫秒(原因尚未
知),而且IP地址必须是不响应请求的地址。其等待2秒的程序如下:
ping-n2-w5000.0.0.1>nul
4)choice的缺省选择等待功能,时间精度为1秒,适用平台为MS-DOS/Win9x/WinNT系列。
/t:y,2将缺省选择字符设置为y,等待时间是2秒,/n禁止[y,n]提示出现在命令行上,
“rem|”的作用是禁止choice从键盘接受按键,从而暂停不会因为按下y或者其它键而被意
外终止。
rem|choice/t:y,2/n>nul
5)ASCII汇编代码,延迟精度为0.001秒,适用平台为MS-DOS/Win9x/WinNT。
德国人HerbertKleebauer给出了一个通用方案,通过ASCII汇编器间接产生一个
程序来实现延迟,这个程序分为DOS和Win两个模块,分别调用DOS系统中断
服务和WindowsAPI。
::-Sleep/Delay/Waitnconds
::HerbertKleebauer(Germany)-2005/05/29
::ModifiedbyWillSort-2005/06/02,07-25
@echooff
echoq|debug>nul
echoBj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>
echo0DxFP,0Xx.t0P,=XtGsB4o@$?PIyUWwX0GwUYWv;ovBX2Gv0ExGIuht6>>
echo
T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?HB~_Phxr?@zAB`LrPEyoDt@Cj?>>
echopky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>
echo
LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep
.com
echo
_GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>
echo
EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.
com
echo
_OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep
.com
echo
dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>slee
echo
QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>
echo
@dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?itEH>>
echo
{zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>
echoQ??PGT~B??OC~?ipO?T?~U?p~cUo0x>>
>
echowait%1conds:
%1000
批处理延时方法小结:
@echooff
:loop
echo%time%
ping127.1-n21>nul
echo%time%
gotoloop
内存使用:1704k
2920k
误差评定:较高
优点:代码构造简单
缺点:内存占用高,延迟时间长的话误差相对较大。
2.还是ping
@echooff
:loop
echo%time%
ping1-n1-w10002>nul1>nul
echo%time%
gotoloop
内存使用:1700k
2912k
误差评定:一般
优点:代码构造简单,时间越长误差越小,精确度较高(50ms)
缺点:内存占用高
@echooff
:loop
echo%time%
call:delay1000
echo%time%
gotoloop
:delay
t/anum=num+1
if%num%geq%1(tnum=)&&goto:eof
remfor/l%%iin(1,1,%1)doecho.>nul
goto:eof
内存使用:1744k[for语句方案]
1740k[t+goto方案]
误差评定:很高(受CPU频率影响非常大,几乎无法准确把握全局延迟时间)
优点:精确度较高
缺点:不适合需精确把握时间的场合
@echooff
:loop
echo%time%
msg%urname%/time:20/w"正在延时,点确定可以取消延时!"
echo%time%
gotoloop
内存使用:1752k
2620k
误差评定:低
优点:比较稳定,可中途取消延时,代码构造简单
缺点:内存占用非常大,有窗口弹出(优点?缺点?)
@echooff
nts(0)>%tmp%
:loop
echo%time%
cscript//b//nologo%tmp%2000
echo%time%
gotoloop
内存使用:4812k
1708k
误差评定:很低
优点:精确度最高,使用更灵活,方便
缺点:产生临时文件,内存占用多
本文发布于:2023-01-29 13:25:45,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/156999.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |