欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Windows命令行bat批处理延迟sleep方法(批处理延时)

程序员文章站 2022-03-08 09:04:53
windows下批处理文件没有像linux一样的sleep函数进行延时处理,这里有2种较为实用的方法实现延迟: 1、使用wscirpt的sleep功能,精度0.001秒...

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来模拟
好不容易从*上找到一个答案(称之为答案,是因为它被人标注为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
(为何不发布出来呢?)

下载地址:

有时候真的是痛恨windows下的批处理.

3、还有两种方法实现sleep功能

一种是通过连续读取系统时间,进行比较,达到一定值时退出实现睡眠功能,但该操作应耗用cpu较大,不推荐。

另一种是德国一位哥们的做法,直接用debug方法生成一个定时器程序,该方法可能破坏系统的稳定性,或容易植入病毒(使用他人代码),亦不推荐使用。

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 时间单位是毫秒

4、从下载sleep.exe文件