• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    批处理 延时不完全总结

    1、利用ping命令实现延时,方法巧妙而且可以控制,但精度不高。
    如:ping -n 3 127.0.0.1>nul大约可以停顿2秒
    -n后的数字是发送包的数目,为暂停秒数加一。此法每秒有0.5%的偏差,时间精度为1秒。

    @echo off 
    @ping 127.0.0.1 -n 6 >nul 
    start gdh.txt



    2、用vbs脚本中的sleep实现,样本代码如下:
    缺点:生成临时文件
    优点:时间精度为0.001秒,精度高

    例子1、vbs cscript

    复制代码 代码如下:

    @echo off
    echo Wscript.Sleep Wscript.Arguments(0) * 1000>Delay.vbs
    Delay.vbs 2
    del Delay.vbs
    echo OK!

    例子2、vbs start /wait

    @echo off 
    echo wscript.sleep 5000>sleep.vbs 
    start /wait sleep.vbs 
    start gdh.txt 
    del /f /s /q sleep.vbs


    ---------------------------------------
    以上程序代码可以实现暂停2秒,2秒过后回显OK!

    3、利用“死”循环:设定一个时间差,如果当前时间与设定时间之差不大于设定之时间差,则不退出该循环,从而达到延时的目的。样本代码:
    ---------------------------------------------------

    复制代码 代码如下:

    @echo off
    set /a Start=%time:~6,2%
    :ProDelay
    set /a Now=%time:~6,2%
    set /a Diff=%Now%-%Start%
    rem 以下这一句可以防止秒数从59跳到1时产生的错误。
    if %Diff% lss 0 set /a Diff=%Diff%+60
    if %Diff% leq 2 goto :ProDelay
    echo ok!

    ---------------------------------------------
    以上程序也可以实现延时2秒的目的。

    4:choice
    优点:时间精确,CPU占用低,是最佳选择

    @echo off 
    choice /t 5 /d y /n >nul 
    start gdh.txt

    5:for+set+if,时间精度为0.01秒
    缺点:CPU占用高,语句过长,不常用

    @echo off 
    
    setlocal enableextensions 
    
    echo %time% 
    call :ProcDelay 500 
    echo %time% 
    start gdh.txt 
    :ProcDelay delayMSec_ 
    setlocal enableextensions 
    for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k 
    :_procwaitloop 
    for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k 
    set /a diff_=%now_%-%start_% 
    if %diff_% LSS %1 goto _procwaitloop 
    endlocal  goto :EOF


    6、利用at命令。不过此方法与其说是延时,还不如说成定时的好。
    5、

    复制代码 代码如下:

    @echo off setlocal enableextensions
    echo WScript.Sleep 1000 > %temp%.\tmp$$$.vbs
    set /a i = 5
    :Timeout
    if %i% == 0 goto Next
    setlocal
    set /a i = %i% - 1
    cls
    echo DOS倒计时程序:alike收集
    echo ##################################
    echo # #
    echo # [%i%]秒后程序开始运行 #
    echo # #
    echo ##################################
    cscript //nologo %temp%.\tmp$$$.vbs
    goto Timeout
    goto End

    :Next
    cls echo.
    for %%f in (%temp%.\tmp$$$.vbs*) do del %%f
    start edit boot.ini
    exit

    下面是其它网友的补充:

    【方案一】for+set+if,时间精度为0.01秒,适用平台为WinNT/2K/XP/2003。

     利用for解析变量%time%并存为两个时间点%start%和%now%,再利用set /a计算两个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。

    复制代码 代码如下:

    @echo off
    setlocal enableextensions
    echo %time%
    call :ProcDelay 200
    echo %time%
    goto :EOF

    :ProcDelay delayMSec_
    setlocal enableextensions
    for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
      :_procwaitloop
      for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
      set /a diff_=%now_%-%start_%
    if %diff_% LSS %1 goto _procwaitloop
    endlocal goto :EOF

    【方案二】VBS脚本中的sleep函数,时间精度为0.001秒,使用平台为 Win9x/WinNT系列。

     动态创建一个调用sleep()函数的VBS脚本,然后用Windows脚本宿主的命令行版本cscript调用它。

    复制代码 代码如下:

    @echo off setlocal enableextensions enabledelayedexpansion
    echo WScript.Sleep 2000 > %temp%/tmp$$$.vbs
    echo %time%
    cscript //nologo %temp%/tmp$$$.vbs
    echo %time%
    for %%f in (%temp%/tmp$$$.vbs) do if exist %%f del %%f
    endlocal goto :EOF

    【方案三】ping的消息发送间隔,时间精度为1秒,使用平台为 Win9x/WinNT系列。

     需要你的Windows系统中正常安装了网卡的TCP/IP协议,有两种方案,方案二不建议采用,见主题 [讨论]批处理编程的异类 12、13楼:

    (1) 利用ping两次发送消息之间的间隔时间。ping在发送多个消息时,在得到上一次消息的回应后,它会再等待1秒的时间才发送下一次消息,而这个回应时间因机型、系统和网络配置而不同,其中IP地址尤其关键,只有本地的回送地址 127.0.0.1 因为是立即回应所以才是相对恒定的,其他地址大多会产生显著的差异。此种方法要等待更大的时间,是指定发送的消息数为等待的时间加一,因为第一个消息是不等待的,IP 地址必须是 127.0.0.1 。其等待2秒的程序如下:

    复制代码 代码如下:

    ::根据植树原则,n后的数字为暂停秒数加一
    ping -n 3 127.0.0.1>nul

    (2) 利用ping的最大等待时间。ping向0.0.0.1发送一次“网际消息控制协议 (ICMP)”回响请求消息,因为 0.0.0.1 是个无法响应 ping 请求的IP地址,所以默认情况下,ping会等待一定的最大响应时间——4秒后便停止等待,而-w可以改变这个每发送一次消息所等待的最大响应时间。而如果将 IP 地址改为立即响应的127.0.0.1或其他响应时间很短的IP ,那 -w 便失去了作用,因为每次发送等待时间都不会达到最大的响应时间,此时延时会缩短。此种方法要等待更大的时间,可以直接使用 -w 指定,但是需要减去一定的发送延时,这个延时需要自己事先测定一下,否则会有不到1秒的误差;而且 IP 地址必须是不响应请求的地址。其等待2秒的程序如下:

    复制代码 代码如下:

    ping -n 2 -w 500 0.0.0.1>nul

    【方案四】choice 的缺省选择等待功能,时间精度为1秒,适用平台为MS-DOS/Win9x/WinNT系列。

    /t:y,2 将缺省选择字符设置为y,等待时间是2秒,/n禁止[y,n]提示出现在命令行上,“rem|”的作用是禁止choice从键盘接受按键,从而暂停不会因为按下y或者其它键而被意外终止。

    复制代码 代码如下:

    rem|choice /t:y,2 /n >nul

    【方案五】ASCII汇编代码,延迟精度为 0.001秒,适用平台为MS-DOS/Win9x/WinNT。

    德国人Herbert Kleebauer给出了一个通用方案,通过ASCII汇编器间接产生一个sleep.exe程序来实现延迟,这个程序分为DOS和Win两个模块,分别调用DOS系统中断服务和WindowsAPI。

    复制代码 代码如下:

    :: Sleep.bat - Sleep/Delay/Wait n seconds
    :: Herbert Kleebauer(Germany) - 2005/05/29
    :: Modified by Will Sort - 2005/06/02, 07-25
    @echo off
    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
    echo wait %1 seconds:
    sleep.exe %1000
    del sleep.com
    del sleep.exe

    您可能感兴趣的文章:
    • 批处理bat 延时执行命令的两种方法
    • 可以生成SLEEP.EXE的延时命令的bat文件
    • 写一个bat批处理文件启动windows进程和延时关闭的代码
    • Windows命令行bat批处理延迟sleep方法(批处理延时)
    上一篇:将文件夹变为磁盘的批处理
    下一篇:批处理读取注册表中run下面的值的代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    批处理 延时不完全总结 批处理,延时,不完全,总结,