-
方法一:ping缺点:时间精度为1秒,不够精确
@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 (此方法使用最多,请看最后面补充的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 1704kping.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 1700kping.exe 2912k误差评定: 一般优点: 代码构造简单,时间越长误差越小,精确度较高(50ms)缺点: 内存占用高3.call@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
@echo off :loop echo %time% msg %username% /time:20 /w "正在延时,点确定可以取消延时!" echo %time%
goto loop内存使用: cmd.exe 1752kmsg.exe 2620k误差评定: 低优点: 比较稳定,可中途取消延时,代码构造简单缺点: 内存占用非常大,有窗口弹出(优点?缺点?)5.vbs
@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 4812kcmd.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:\windows\system32\ 我想删除最后一个字符"\"变为c:\windows\system32 set "str=c:\windows\system32\" 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:\windows\system32\notepad.exe
-
-
补充:Choice 命令解释
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] 描述: 该工具允许用户从选择列表选择一个项目并返回所选项目的索引。 参数列表: /C choices 指定要创建的选项列表。默认列表是 "YN"。 /N 在提示符中隐藏选项列表。提示前面的消息得到显示, 选项依旧处于启用状态。 /CS 允许选择分大小写的选项。在默认情况下,这个工具 是不分大小写的。 /T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项 会得到选择。 /D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选 项指定的一组选择中; 同时,必须用 /T 指定 nnnn。 /M text 指定提示之前要显示的消息。如果没有指定,工具只 显示提示。 /? 显示此帮助消息。 注意: ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选 择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择, 该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的 ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降 序排列。 示例: CHOICE /? CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。" CHOICE /T 10 /C ync /CS /D y CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。" CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"