在Windows批处理程序中实现延时功能

方法1:使用PowerShell

@echo off

:: 使用 PowerShell 的 Start-Sleep 命令来实现精确延时
powershell -command "Start-Sleep -Milliseconds 3000"

echo Delay complete.

不过,通常Win7专业版和旗舰版中都会默认安装了PowerShell,但是标准版和家庭版中就没有安装,因此当你碰到Win7系统里没有PowerShell工具时,只能进行手动添加了。具体安装方法请自行百度,本文的重点不在这个。

方法2:ping -n 3 127.1 >nul

实现原理:使用 ping 命令,它会发送网络请求以检查主机的连通性。在这个情况下,-n 3 表示发送3个网络请求,127.1 是本地主机地址,>nul 表示将输出重定向到空设备,即不显示在控制台上。这个命令实际上发送3个网络请求到本地主机,但由于目标地址是本地的回环地址,所以不会有实际网络活动。

但是:受实际网络结构的影响,这个延时功能可能并不理想,有时候只延时了2秒,有时候会超过10秒钟。

方法3:choice /t 3 /d y /n >nul

它在 Windows 中等待用户在一段时间内做出选择。在这个情况下,/t 3 表示等待3秒,/d y 表示默认选择"Y"(Yes),/n 表示不显示选择提示信息,>nul 表示将输出重定向到空设备,即不显示在控制台上。这个命令实际上等待3秒钟,并假定用户选择"Y"(Yes)。

方法4:自己写个函数

@echo off
setlocal enabledelayedexpansion

REM 定义函数:精确延时
:preciseDelay
setlocal
set "targetTime=%~1"

REM 获取当前时间的毫秒表示
for /f "tokens=1-4 delims=:." %%a in ("!time!") do (
    set /a "startMS=(((%%a*60+1%%b %% 100)*60+1%%c %% 100)*1000+1%%d %% 1000)"
)

REM 循环检查时间差
:loop
set "currentTime=!time!"
for /f "tokens=1-4 delims=:." %%a in ("!currentTime!") do (
    set /a "currentMS=(((%%a*60+1%%b %% 100)*60+1%%c %% 100)*1000+1%%d %% 1000)"
)

set /a "diff=currentMS-startMS"
if !diff! lss %targetTime% (
    goto loop
)

endlocal
exit /b
REM 函数结束

REM 调用示例
echo "Start"
call :preciseDelay 3000
echo "End"

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值