批處理延時幾例

舉個例子,咱們要延時5秒打開gdh.txt這個文件,能夠用如下幾個方法windows

方法一:ping
缺點:時間精度爲1秒,不夠精確
@echo off
@ping 127.0.0.1 -n 6 >nul
start gdh.txtide

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

方法三: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.net

批處理延時方法小結:
1.ping
@echo off
:loop
echo %time%
ping 127.1 -n 2 1>nul
echo %time%
goto loop
內存使用: cmd.exe 1704k
ping.exe 2920k
偏差評定: 較高
優勢: 代碼構造簡單
缺點: 內存佔用高,延遲時間長的話偏差相對較大。debug

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)
缺點: 內存佔用高ip

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頻率影響很是大,幾乎沒法準確把握全局延遲時間)
優勢: 精確度較高
缺點: 不適合需精確把握時間的場合rem

4.msg
CODE:
@echo off
:loop
echo %time%
msg %username% /time:20 /w "正在延時,點肯定能夠取消延時!"
echo %time%
goto loop內存使用: cmd.exe 1752k
msg.exe 2620k
偏差評定: 低
優勢: 比較穩定,可中途取消延時,代碼構造簡單
缺點: 內存佔用很是大,有窗口彈出(優勢?缺點?)cmd

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

相關文章
相關標籤/搜索