Windows命令行bat批处理延迟sleep方法(批处理延时)
这篇文章主要介绍了Windows命令行bat批处理延迟sleep方法,需要的朋友可以参考下
Windows下批处理文件没有像Linux一样的Sleep函数进行延时处理,这里有2种较为实用的方法实现延迟:
1、使用WScirpt的sleep功能,精度0.001秒
创建vbs延迟文件,然后在批处理文件中调用,使用WScript的 sleep函数,实现sleep的效果。
实战:
1)创建文件sleep.vbs:
echo WScript.sleep 5000 > sleep.vbs
sleep.vbs 内容如下:
WScript.sleep 5000。
2)在批处理文件中调用,创建示例文件test.bat,内容如下:
复制代码代码如下:
sc stop OracleOraDb10g_home1TNSListener
Wscript sleep.vbs
sc start OracleOraDb10g_home1TNSListener
2、使用ping 的定时功能,精度1秒
实战:创建示例文件test2.bat,内容如下:
复制代码代码如下:
sc stop OracleOraDb10g_home1TNSListener
ping -n 3 127.0.0.1>nul
sc start OracleOraDb10g_home1TNSListener
说明:3为ping包发送次数,可作为延迟秒数进行使用,需要延迟几秒就设置几。
>nul避免屏幕输出,将输出输入到空设备,因为不需要结果,仅用到其定时功能。
以下是其他网友的补充:
好好的批处理,居然没有正式的Sleep可供调用。有时候,确实感到很无趣。
1. 方法1:
ping 1.1.1.1来模拟
好不容易从stackoverflow上找到一个答案(称之为答案,是因为它被人标注为answer),是这么实现的:
ping 1.1.1.1 -n 1 -w 60000 > nul
这个表示,会sleep 60秒钟。
果真如此吗? 它要基于一个假设:1.1.1.1永远不会被目标机器ping通。但我却碰到了灵异事件,在某台测试机上,直接能ping通:
Pinging 1.1.1.1 with 32 bytes of data:
Reply from 1.1.1.1: bytes=32 time<1ms TTL=60
Reply from 1.1.1.1: bytes=32 time<1ms TTL=60
Reply from 1.1.1.1: bytes=32 time=6ms TTL=60
Reply from 1.1.1.1: bytes=32 time<1ms TTL=60
Ping statistics for 1.1.1.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 6ms, Average = 1ms
所以,这个方法是靠不住的。
2. 依然使用ping来模拟,
请看下边的bat:
这个就表示要sleep大概60秒钟。
当然,你也可以把wait_ext1那部分重命名一个单独的批处理进行调用。
3. 似乎2003还有一个resource kit包下载,里边就有sleep.exe
(为何不发布出来呢?)
下载地址:https://www.jb51.net/softs/2466.html
有时候真的是痛恨Windows下的批处理.
3、还有两种方法实现Sleep功能
一种是通过连续读取系统时间,进行比较,达到一定值时退出实现睡眠功能,但该操作应耗用CPU较大,不推荐。
另一种是德国一位哥们的做法,直接用debug方法生成一个定时器程序,该方法可能破坏系统的稳定性,或容易植入病毒(使用他人代码),亦不推荐使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | echo q | debug>nul echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh( Ls (Lu(LX(LeZRR]EEEUYRX2Dx=> sleep .com echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>> sleep .com echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy ? seHB~_Phxr?@zAB`LrPEyoDt@Cj?>> sleep .com echo pky_jN@QEKpEt@ij ? jySjN@REKpEt@jj ? jyGjN@SEKkjtlGuNw ? p@pjirz>> sleep .com echo LFvAURQ ? OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH ? Vkk>> sleep .com echo _GSqoCvH{OjeOSeIQRmA@KnEFB ? p??mcjNne~B ? M??QhetLBgBPHexh@e=>> sleep .com 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>> sleep .com echo QTqrK@kcmSULkPcLOOuLOOFUO ? hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>> sleep .com echo @dmTkRQSoddTT~?K ? OCOQp ? o??Gds ? wOw ? PGAtaCHQvNntQv_w ? A ? it\EH>> sleep .com echo {zpQpKGk ? Jbs ? FqokOH{T ? jPvP@IQBDFAN ? OHROL ? Kj??pd~aN ? OHROd ? G>> sleep .com echo Q??PGT~B??OC~?ipO ? T?~U ? p~cUo0x>> sleep .com sleep .com> sleep .exe del sleep .com |
以上代码要使用批处理方式.使用 sleep.exe 10000 时间单位是毫秒