bat延时100ms_批处理延时几例

举个例子,我们要延时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.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

误差评定: 很低

优点: 精确度最高,使用更灵活,方便

缺点: 产生临时文件,内存占用多

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

一个取代choice命令的批处理 (精典)

@echo off && setlocal && cls

:tou

chcp 437 >nul

graftabl 936 >nul

set /p=请选择 [ 回车键 --- 执行A 其它键 --- 执行B ]:

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=

set /p= (alt+数字键盘22为退格键,可在记事本中键入)

for /d %%a in (做 个 语 文 老 师 真 不 容 易 . 以 下 是 学 生 的 造 句 ) do set /p=%%anul

逐字显示:我是一个中国人

@echo off

for %%a in (我 是 一 个 中 国 人) do ping -n 2 127.0|set /p b=%%a

for /d %%a in (我 是 一 个 中 国 人) do set /p b=%%anul

::自注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!

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 ]:

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 )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值