bat延时执行语句

在 bat批处理中实现延时功能的几种常用方式

1. 使用ping命令实现延时

使用ping命令可以实现延时的效果,命令如下:

ping 127.0.0.1 -n 11 >nul

-n 指定ping的次数,每次大概间隔1s,>nul将ping过程回显信息给屏蔽
ping命令实现的延时,时间精度:大约1s,内存占用:ping命令所占用空间
注意闭坑:ping 从第1次发出请求到接收到回显数据几乎是瞬间的,所以你如果想实现10秒的延时,需要设置-n 为11(至少针对ping 127.0.0.1 回环地址是这样),网上很多说需要多少秒,-n参数值就设置多少秒, 真是有些误人子弟呢!
我还从网上看到过使用-w参数,指定超时等待时间来作为延时时间的,这不是可能,除非指定的地址ping不通,否则这个延时实现根本不可靠
可以通过下边的脚本,验证下-n到底应该设置多少

@echo off
echo s_time:%time%
ping -n 1 127.0.0.1 > nul
echo e_time:%time%
echo s_time2:%time%
ping -n 2 127.0.0.1 > nul
echo e_time2:%time%
pause

输出结果:

可以看出,网上那些说【需要延时多少秒,-n就设置多少秒】的人,是有多误人子弟了。不过当-n指定的值越大,最终的延时误差就越大,最终可能也不在乎这1秒的误差了,你可以尝试将-n设置为较大值验证下。
(这个误差实际上与你ping的地址有很大关系)

然后再通过一个脚本,验证下-w参数,对应延时等待是否有效

@echo off
echo s_time:%time%
ping -n 10 -w 5000 127.0.0.1 > nul
echo e_time:%time%
pause

按网上错误的说法,这里的结果应该为延时 10*5000/1000=50 秒;从测试结果看,实际上延时大概只有(10-1)秒;-w指定的值未生效,如果你能保证被ping的地址每次都是超时(注意不是ping不通)-w参数指定的时间才会作用到延时效果中

2. 使用timeout命令实现延时

使用timeout命令也可以实现延时的效果,命令如下:

timeout /t 5 /nobreak >nul

/t 指定等待的描述,有效范围-1到99999秒,-1表示无限期的等待
/nobreak表示忽略按键并等待指定时间,唯一能接收的按键是Ctrl+Z组合键,如果等待时间未到,按Ctrl+Z键将终止批处理程序,timeout后续的命令也不在执行
timeout命令实现的延时,除-1无限等待外,单次最大延时99999秒,不过你可以多次调用timeout命令来实现超过这个限制的延时等待
timeout命令实现的延时,时间精度:大约1s,内存占用:timeout命令所占用空间

3. 使用choice命令实现延时

使用choice命令也可以实现延时的效果,命令如下:

choice /C yn /T 10 /D y >nul

/C 指定选项列表,/T 指定做出默认选择之前,等待的时间,可接受的值0-9999,/D 超过等待时间后,默认选择项;
choice命令实现的延时,单次最大延时9999秒,不过你可以多次调用choice命令来实现超过这个限制的延时等待;
3.choice命令实现的延时,时间精度:大约1s,内存占用:chocie命令所占用空间

4. 使用for循环实现延时

使用for循环也可以实现延时的效果,确切的来说是使用for循环+ping/timeout/choice组合,来实现延时的效果。
实现100s延时,命令如下:

::for+ping组合
for /l %%i in (1,1,10) do @echo %%i & ping -n 11 127.0.0.1 >nul
::for+timeout组合
for /l %%i in (1,1,10) do @echo %%i & timeout /t 10 >nul
::for+choice组合
for /l %%i in (1,1,10) do @echo %%i & choice /C yn /T 10 /D y >nul

for+ping/timeout/choice组合的方式,可以灵活的组合出你想要的延时时间,而不受timeout/choice单次最大延时的限制;
ping命令想要延时m秒,则-n参数值需设置为m+1,因为首次发出ping请求到接收到值几乎是瞬时的;
对于这种组合命令的延时,我建议尽可能将for的循环次数设置较小,而循环体内具体实现延时任务的命令对应的参数值设置尽可能大。因为我理解每次循环,相当于重新启动了ping/timeout/choice的程序,而每次启动程序势必会耗费一定的时间,当循环次数较多时,这个启动时间带来的影响将是比较大的。
(在我本地测试,使用for+ping组合命令,同样实现100s延时,for循环1次+ping -n 101 实际耗时大约101s,而 for循环100次+ping -n 2 实际耗时大约102s,后者比前者多出大约1s)

5. 使用sleep命令实现延时

Windows batch中没有原生的sleep命令,需要借助第三方工具。
下载sleep.exe

curl https://www.computerhope.com/download/utility/sleep.exe > sleep.exe
将下载好的sleep.exe程序,放到C:\Windows\System32或其他在PATH环境变量中的路径,即可全局使用。

实现延时10s,使用比较简单:

sleep 10

时间精度:1毫秒
内存占用:sleep命令本身很小

6. 使用VBScript.sleep实现延时

在批处理中,可以通过调用vbscript的方式实现延时功能
1)创建一个vbs脚本文件(如 delay.vbs),内容如下:

WScript.Sleep WScript.Arguments.Item(0)

2)在批处理脚本中调用这个vbscript,实现延时

cscript //nologo delay.vbs 1000 >nul

表示在调用delay.vbs脚本时传入参数1000,表示等待1000毫秒,即1秒钟。

时间精度:1毫秒;内存占用:vbs脚本本身并不大,执行vbs的cscript/wscript进程大概占用1MB内存;
调用vbs脚本,还可以使用wscript命令,如 wscript delay.vbs 1000 >nul
需要注意脚本文件和批处理脚本文件的路径问题
你也可以使用临时vbscript脚本的方式避免路径问题,具体如下:

echo WScript.Sleep WScript.Arguments.Item(0) > delay.vbs
cscript //nologo delay.vbs 1000 >nul && del delay.vbs

即在批处理文件当前路径下生成vbs,用完就删除。

总结

除了sleep.exe是第三方工具,需要下载安装,其余都是Windows自带的,可以直接使用;
一般来说,使用ping命令或timeout命令即可,但如果若要获得更精确的延时时间,可以优先考虑VBScript.sleep方案;
虽然ping命令可能是最常用的,但是当需要延迟的时间较长时,它的误差会越来越多,timeout/choice会比它好很多

`bat脚本`,即批处理脚本,是一种在Windows操作系统上使用的命令行脚本语言。用户通过编写一系列命令和宏指令,可以自动化地完成多种任务。为了在bat脚本中实现延迟操作,通常需要利用一些特殊的技巧,因为bat脚本本身并不直接支持毫秒级别的延时。 虽然在传统意义上,bat脚本没有内置的功能来实现毫秒级的延时,但是可以通过模拟计数循环来达到类似的效果。以下是一个示例,展示了如何在bat脚本中模拟500毫秒的延时: ```batch @echo off set /a count=0 rem 计算总共需要运行多少次循环来达到大约500毫秒的延时 for /l %%i in (1,1,5) do ( set /a "delay_count=%%i*100" ) :loop set /a count+=1 if %count% LSS %delay_count% goto loop echo 延迟结束! pause ``` 在这个例子中,我们首先设置了循环的总次数(每循环一次增加100,总共5次),这大约等于500毫秒。然后,我们在一个标签`loop`下面设置了一个无限循环,每次迭代都增加一个计数器`count`。当`count`达到预先计算出的值时,跳出循环并显示“延迟结束!”的消息。最后,程序会暂停等待用户按键关闭窗口。 当然,在实际应用中,对于更精确或性能敏感的任务,推荐使用更高层次的语言如Python、JavaScript等,它们拥有内置的延时功能,例如Python的`time.sleep()`函数可以直接控制毫秒级别的延时,使用起来更为简单高效。比如: ```python import time # 使用time.sleep()实现500毫秒的延时 time.sleep(0.5) print("延时结束!") ``` 这种做法在跨平台的项目中尤其有优势,因为它无需依赖特定的操作系统特性,并能提供更稳定的性能和易读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值