美文网首页
Windows命令:时间延迟命令

Windows命令:时间延迟命令

作者: 羋学僧 | 来源:发表于2023-07-28 16:57 被阅读0次

    延迟一段时间再执行下一条命令”。

    一、利用ping实现延迟命令

    这种延时手段是不精确的,因为每一次ping通的延迟不一样。

    1、示例

    chcp 65001
    @echo off
    echo 延时前:%time%
    ping /n 3 127.0.0.1 >nul
    echo 延时后:%time%
    pause 
    

    参数/n表示ping通的次数。
    127.0.0.1是本机ip地址,在这里可以简写成127.1。
    >nul表示不将结果显示在屏幕上。

    在Bat文件中执行,效果如下,可以看到延时了2秒钟。

    二、利用循环命令for外加参数/l实现延时

    添加参数/l,然后设置start、step、end分别为1、1、n,通过调整变量n的数值大小,就可以改变延时长短。
    这个延时,也是不精确的。

    1、示例

    chcp 65001
    @echo off
    echo 延时前:%time%
    for /l %%i in (1,1,100000) do echo %%i>nul
    echo 延时后:%time%
    pause
    
    在bat文件中执行,结果如下,10万次对应大概20s的延时。

    三、利用goto循环实现对精确延时

    实现原理:

    用户给出延时时间T,在进入延时循环之前记一次当前时间t1,而后执行到循环最后一句时再记一次当前时间t2;如果通过if命令语句判断出来T大于t2和t1的差值,就借goto命令语句再次进入循环,而如果判断出来小于差值,就用goto :eof命令退出循环。

    1、代码示例(不调用子程序),在bat脚本中执行下面的代码:

    @echo off
    chcp 65001
    set /p delay=请输入需延迟的毫秒数:
    set TotalTime=0
    set NowTime=%time%
    ::读取起始时间,时间格式为:13:01:05.95
    echo 程序开始时间:%NowTime%
    :delay_continue
    set /a minute1=1%NowTime:~3,2%-100
    ::读取起始时间的分钟数
    set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    ::将起始时间的秒数转为毫秒
    set NowTime=%time%
    set /a minute2=1%NowTime:~3,2%-100
    :: 读取现在时间的分钟数
    set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    ::将现在时间的秒数转为毫秒
    set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
    if %TotalTime% lss %delay% goto delay_continue
    echo 程序结束时间:%time%
    echo 设定延迟时间:%delay%毫秒
    echo 实际延迟时间:%TotalTime%毫秒
    pause
    
    回车执行后,提示输入延迟毫秒数
    延时精度:

    windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。经测试,当延迟时间大于500毫秒时,上面的延迟程序一般不存在误差。当延迟时间小于500毫秒时,可能有几十毫秒误差,为什么?因为延迟程序本身也是有运行时间的,同时系统时间只能精确到10毫秒。

    2、下面再给出一个需要调用子程序的延时代码,实现原理和上面的一样。

    @echo off
    echo 程序开始时间:%Time%
    call :delay 10
    echo 实际延迟时间:%totaltime%毫秒
    echo 程序结束时间:%time%
    pause
    exit
     
    ::-----------以下为延时子程序--------------------
    :delay
    @echo off
    if "%1"=="" goto :eof
    set DelayTime=%1
    set TotalTime=0
    set NowTime=%time%
    ::读取起始时间,时间格式为:13:01:05.95
    :delay_continue
    set /a minute1=1%NowTime:~3,2%-100
    set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    set NowTime=%time%
    set /a minute2=1%NowTime:~3,2%-100
    set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
    if %TotalTime% lss %DelayTime% goto delay_continue
    goto :eof
    

    相关文章

      网友评论

          本文标题:Windows命令:时间延迟命令

          本文链接:https://www.haomeiwen.com/subject/jfbkpdtx.html