dos批处理延时技术
2864 点击·0 回帖
![]() | ![]() | |
![]() | dos批处理延时技术 举个例子,我们要延时5秒打开gdh.txt这个文件,可以用以下几个方法 方法一:ping 缺点:时间精度为1秒,不够精确 @echo off @ping 127.0.0.1 -n 6>nul start gdh.txt 方法二:vbs start /wait 缺点:生成临时文件 有点:时间精度为0.001秒,精度高 @echo off echo wscript.sleep5000>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 @echooff :loop echo %time% ping 127.1 -n 2 1>nul echo %time% goto loop 内存使用: cmd.exe1704k ping.exe 2920k 误差评定:较高 优点: 代码构造简单 缺点: 内存占用高,延迟时间长的话误差相对较大。 2.还是ping @echooff :loop echo %time% ping 1 -n 1 -w 10002>nul 1>nul echo %time% goto loop 内存使用:cmd.exe 1700k ping.exe 2912k 误差评定:一般 优点: 代码构造简单,时间越长误差越小,精确度较高(50ms) 缺点: 内存占用高 3.call CODE: @echooff :loop echo %time% call :delay1000 echo %time% goto loop :delay set /anum=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% gotoloop内存使用: cmd.exe 1752k msg.exe 2620k 误差评定:低 优点: 比较稳定,可中途取消延时,代码构造简单 缺点: 内存占用非常大,有窗口弹出(优点?缺点?) 5.vbs CODE: @echooff echo Wscript.Sleep WScript.Arguments(0)>%tmp%delay.vbs :loop echo %time% cscript //b//nologo %tmp%delay.vbs 2000 echo %time% gotoloop 内存使用: 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 CD21$_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 gototou @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 2127.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 1127.1>nul 逐字显示:我是一个中国人 @echo off for %%a in (我 是 一 个中 国 人) do ping -n 2 127.0|set /p b=%%a for /d %%a in (我 是 一 个 中 国 人) doset /p b=%%a<nul;ping -n 1 127.1>nul ::自注set后面的%%a如果添加空格,效果是:我是 一 个,不加空格,效果是:我是一个 @echo off;setlocalenabledelayedexpansion 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) doecho.>nul ) else ( pause>nul;exit/b ) ) 计划任务设定 SCHTASKS /Create /SC DAILY /RU administrator /RP HZF /TN HU /SD2008/11/21 /ST 21:30:00 /TR c:windowssystem32notepad.exe | |
![]() | ![]() |