举个例子,我们要延时5秒打开gdh.txt这个文件,可以用以下几个方法

方法一:ping 
缺点:时间精度为1秒,不够精确 

@echo off 
 @ping 127.0.0.1 -n 6 >nul


start gdh.txt

如:1.bat文件中

start %SystemDrive%\Windows\System32\startnet.cmd
cd  %systemdrive%\tools\SkyIAR
start %systemdrive%\tools\SkyIAR\SkyIAR_v2_x86.exe
ping 127.0.0.1 -n 50 > nul
start %systemdrive%\tools\BSExplorer\Explorer.exe
cmd

start相当于新建一个线程,不加start相当于顺序执行。



方法二: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 
 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!

@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

对比延时

@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!

利用选择延时

@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 )