zoukankan      html  css  js  c++  java
  • DOS批处理延时技术

     DOS批处理延时技术

    举个例子,我们要延时5秒打开gdh.txt这个文件,可以用以下几个方法
    方法一:ping 
    缺点:时间精度为1秒,不够精确   www.2cto.com  
    @echo off 
    @ping 127.0.0.1 -n 6 >nul
    start gdh.txt

    方法二:vbs start /wait
    缺点:生成临时文件 
    有点:时间精度为0.001秒,精度高
    @echo off
    echo wscript.sleep 5000>sleep.vbs
    start /wait sleep.vbs
    start gdh.txt 
    del /f /s /q sleep.vbs

    方法三:vbs cscript. 
    @echo off 
    echo wscript.sleep 5000>sleep.vbs
    @cscript sleep.vbs >nul
    start gdh.txt 
    del /f /s /q sleep.vbs
    方法四:choice 
    优点:时间精确,CPU占用低,是最佳选择 
    @echo off 
    choice /t 5 /d y /n >nul
    start gdh.txt

    批处理延时方法小结:
    1.ping 
    @echo off
    :loop
        echo %time%
        ping 127.1 -n 2 1>nul 
        echo %time%
    goto loop
    内存使用: cmd.exe 1704k
                  ping.exe 2920k    
    误差评定: 较高
    优点:       代码构造简单
    缺点:       内存占用高,延迟时间长的话误差相对较大。
    2.还是ping 
    @echo off
    :loop
        echo %time%
        ping 1 -n 1 -w 1000 2>nul 1>nul
        echo %time%
    goto loop
    内存使用: cmd.exe 1700k
                   ping.exe 2912k
    误差评定: 一般
    优点:        代码构造简单,时间越长误差越小,精确度较高(50ms)
    缺点:        内存占用高
    3.call 
    CODE:   
    @echo off
    :loop
        echo %time%
        call :delay 1000
        echo %time%
    goto loop
    :delay
        set /a num=num + 1
        if %num% geq %1 (set num=) && goto :eof
    rem    for /l %%i in (1,1,%1) do echo. >nul
    goto :eof
    内存使用: cmd.exe 1744k [for语句方案]
                   cmd.exe 1740k [set+goto方案]
    误差评定: 很高 (受CPU频率影响非常大,几乎无法准确把握全局延迟时间)
    优点:       精确度较高
    缺点:        不适合需精确把握时间的场合
    4.msg 
    CODE:   
    @echo off
    :loop
        echo %time%
        msg %username% /time:20 /w "正在延时,点确定可以取消延时!"
        echo %time%
    goto loop内存使用: cmd.exe 1752k
                   msg.exe 2620k
    误差评定: 低
    优点:       比较稳定,可中途取消延时,代码构造简单
    缺点:        内存占用非常大,有窗口弹出(优点?缺点?)
    5.vbs 
    CODE:   
    @echo off
        echo Wscript.Sleep WScript.Arguments(0) >%tmp%delay.vbs
    :loop
        echo %time%
        cscript //b //nologo %tmp%delay.vbs 2000
        echo %time%
    goto loop
    内存使用: cscript.exe 4812k
                   cmd.exe    1708k
    误差评定: 很低
    优点:        精确度最高,使用更灵活,方便
    缺点:        产生临时文件,内存占用多
    一个取代choice命令的批处理 (精典)
    @echo off && setlocal && cls
    :tou
    chcp 437 >nul
    graftabl 936 >nul
    set /p=请选择 [ 回车键 --- 执行A             其它键 --- 执行B ]:<nul
    echo exit|cmd/kprompt $_e 100 CD 16 B4 4C CD 21$_g$_|debug>nul
    echo.&echo.&echo.
    if [%errorlevel%]==[13] ( goto :A ) else ( goto :B )
    :A
    ::按回车符到这里执行
    echo 这里是标签: A
    echo.
    goto :End
    :B
    ::按其它键到这里执行
    echo 这里是标签: B
    echo.
    goto :End
    :End
    ::     用于测试键值的代码段
    ::     如果希望代替Choice外部命令,则这个代码段可以测试出不同的键值交由%ErrorLevel%判断
    echo 所输入的ASCII码键值: %errorlevel%
    echo.&echo.&echo.&echo.&echo.&Pause
    cls
    goto tou
    @echo off
    :go
    cls
    echo 计算机将于 17:40 关机
    echo 现在时间是 %time% 
    echo %time% >time.txt 
    find /i "17:48" time.txt >nul
    if %errorlevel%==1 goto go 
    taskkill /f /im cmd.exe 
    exit
    实时显示当前时间
    @echo off 
    echo %time:~0,-3% 
    ping -n 2 127.1>nul&cls&%0
    ::第二行代码说明:“:”和 “~”必不可少!“~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。逗号后的数字:为正数表示取到输出结果的前第 几位;为负数表示舍弃输出结果的后几位。echo %date:~4% echo %time:~-3% echo %date:~4% %time:~0,-3%
    现在我有一条路径:c:windowssystem32 
    我想删除最后一个字符""变为c:windowssystem32 
    set "str=c:windowssystem32" 
    echo %str:~0,-1%
    逐字显示
    @echo off&color 0a&title 做语文老师真不容易 
    set /p= <nul
    set /p= (alt+数字键盘22为退格键,可在记事本中键入)<nul
    for /d %%a in (做 个 语 文 老 师 真 不 容 易 . 以 下 是 学 生 的 造 句 ) do set /p=%%a<nul&ping -n 1 127.1>nul
    逐字显示:我是一个中国人
    @echo off
    for %%a in (我 是 一 个 中 国 人) do ping -n 2 127.0|set /p b=%%a
    for /d %%a in (我 是 一 个 中 国 人) do set /p b=%%a<nul&ping -n 1 127.1>nul
    ::自注set后面的%%a如果添加空格,效果是:我 是 一 个,不加空格,效果是:我是一个
    @echo off&setlocal enabledelayedexpansion
    set "str=http://bbs.cn-dos.net"
    for /l %%a in (0 1 50) do (
          if "!str:~%%a,1!" neq "" (
              set/p=!str:~%%a,1!<nul
              for /l %%i in (1 1 400) do echo.>nul
             ) else (
             pause>nul&exit/b
         )
    )
    计划任务设定 
    SCHTASKS /Create /SC DAILY /RU administrator /RP HZF /TN HU /SD 2008/11/21 /ST 21:30:00 /TR c:windowssystem32 otepad.exe
  • 相关阅读:
    【02】Nginx:基本配置和日志处理
    【01】Nginx:编译安装/动态添加模块
    【09】Jenkins:Pipeline 补充
    【08】Jenkins:关于发布
    【07】Jenkins:流水线(Pipeline)
    【06】Jenkins:Gitlab 自动触发构建以及钉钉通知
    【05】Jenkins:用户权限管理
    【04】Jenkins:基本功能补充说明
    【03】Jenkins:SonarQube
    【02】Jenkins:第一个项目
  • 原文地址:https://www.cnblogs.com/timssd/p/5101543.html
Copyright © 2011-2022 走看看