1. 程式人生 > >重命名程序日誌--批處理延時啟動的幾個方法

重命名程序日誌--批處理延時啟動的幾個方法

判斷 echo 排列 sta 提示信息 文件中 創建 rec 警告

@echo off

taskkill /f /im "3CSyslog.EXE"

choice /t 1 /d y /n >nul

cd E:\PIX_LOG

del syslog.log333

choice /t 1 /d y /n >nul

ren syslog.log222 syslog.log333

choice /t 1 /d y /n >nul

ren syslog.log111 syslog.log222

choice /t 1 /d y /n >nul

ren syslog.log000 syslog.log111

choice /t 1 /d y /n >nul

ren syslog.log syslog.log000

choice /t 1 /d y /n >nul

start "" "E:\3CSyslog.EXE"

choice /t 5 /d y /n >nul


批處理延時啟動的幾個方法
方法一:ping
缺點:時間精度為1秒,不夠精確
Cmd代碼 收藏代碼
@echo off
@ping 127.0.0.1 -n 6 > nul
start gdh.txt

方法二:vbs start /wait
缺點:生成臨時文件
優點:時間精度為0.001秒,精度高
Cmd代碼 收藏代碼
@echo off
echo wscript.sleep 5000 > sleep.vbs

start /wait sleep.vbs
start gdh.txt
del /f /s /q sleep.vbs

方法三:vbs cscript
Cmd代碼 收藏代碼
@echo off
echo wscript.sleep 5000 > sleep.vbs
@cscript sleep.vbs > nul
start gdh.txt
del /f /s /q sleep.vbs

方法四:choice
優點:時間精確,CPU占用低,是最佳選擇
Cmd代碼 收藏代碼
@echo off
choice /t 5 /d y /n > nul
start gdh.txt

方法五:for+set+if,時間精度為0.01秒

缺點:CPU占用高,語句過長,不常用
Cmd代碼 收藏代碼
@echo off
setlocal enableextensions
echo %time%
call :ProcDelay 500
echo %time%
start gdh.txt
:ProcDelay delayMSec
setlocal enableextensions
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start
=%%h%%i%%j%%k
:procwaitloop
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now
=%%h%%i%%j%%k
set /a diff=%now%-%start%
if %diff
% LSS %1 goto _procwaitloop
endlocal & goto :EOF

我使用的是這個批處理,唯一不好就是有窗口
Cmd代碼 收藏代碼
@echo off
:: 模擬進度,有剩余時間、已完成進度、進度條的顯示
:: code by
color 1f
title.
mode con lines=10
rem 進度條 ▉▉▉▉▉
set work=0
set n=0
set mo=0
set number=0
rem all是總數
set all=10
set time=%all%
:show

:check
if %number% GTR %mo% set num=%num%▉&set /a mo=%mo%+1&goto check

:2

cls
echo 進度: %n% / %all% ★程序正在啟動請稍等★ 剩余時間:%time%秒
echo.
echo.
echo 完成 %work% %%%
echo.
if not "%num%"=="" echo %num%
if not "%num%"=="" echo %num%

if %work%==100 goto end

ping 127.1 -n 2 >nul
set /a n=%n%+1
set /a time=%all%-%n%
set /a work=(%n%)*100/(%all%)
set /a number=%work%/3
set /a number=%number%+1
goto show
endlocal

:end
@echo off
start C:\Progra~1\tools\xsdy\1.exe
exit

Choice 命令

使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。使用時應該加/c:參數,c:後應寫提示可輸入的字符,之間無空格。它的返回碼為1234……。這個命令在有些Windows版本(比如WindowsXP)上可能不可用。

語法:
CHOICE:[/C[:]按鍵表] [/N] [/S] [/T[:]選擇值,秒數] [顯示文本]
其中,/C表示可選則的按鍵,/N表示不要顯示提示信息,/S表示大小寫字符敏感方式,/T表示若在批定的時間內沒有選擇的話,自動執行/C中定義的某個選擇值。顯示文本是CHOICE命令執行時的提示信息。選擇結果將用ERRORLEVEL值來表示。

示例:

?

1234567891011121314151617

@echo offchoice /c:dme defrag,mem,endif errorlevel 3 goto defrag REM 應先判斷數值最高的錯誤碼if errorlevel 2 goto memif errorlevel 1 goto end :defragc:\dos\defraggoto end :memmemgoto end :endecho good bye

此文件運行後,將顯示 defrag,mem,end[D,M,E]? 用戶可選擇d m e ,然後if語句將作出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,文件結束。

可替換的命令

對WindowsXP上不能使用CHOICE命令的情形,如果想使用相似的功能,可以使用 SET 命令,參見Set 命令 /P選項。

choice一般在cmd批處理中用來根據用戶輸入執行不同的操作,非常實用,例如

下面是兩個軟件根據用戶選擇來執行

?

123456789101112131415161718192021222324252627282930

@echo off遠程協助工具集:startclscolor 0aMODE con: COLS=60 LINES=20echo.echo ===============================echo 請選擇遠程工具echo ===============================echo.echo 1. AnyDeskecho.echo 2. TeamViewerecho.echo.:choset choice=set /p choice= 請輸入工具編號:IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%if /i "%choice%"=="1" goto AnyDeskif /i "%choice%"=="2" goto TeamViewer :AnyDeskAnyDesk.exeexit :TeamViewerTeamViewer.exeexit

下面來介紹一下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。"

下面是來自國外網站的介紹

The CHOICE command was introduced in MS-DOS 6 and is still available in MS-DOS 7 (Windows 95/98).

In Windows NT 4, 2000 and XP, CHOICE is no longer a part of the standard distribution. It is, however, available as part of the Windows NT 4 Resouce Kit.
On the other hand, if you still have that old unused MS-DOS 6 or Windows 95/98 version lying around, you can use the CHOICE.COM from that version instead. (*)
Just copy it to a directory that is in your PATH.

Note: 16-bit DOS versions will not work in 64-bit Windows versions.
CHOICE is available again in Windows Vista and later versions.

大部分意思就是 這個命令會在以後的系統中一直存在,但註意16位的系統無法在64位系統自帶了,而我們安裝的64位系統已經集成了64的choice命令,大家可以放心使用。

註釋
ERRORVALUE 環境變量被設置為用戶從選擇列表中選擇的鍵的索引。您指派的第一個鍵將返回值 1,第二個將返回值 2,第三個將返回值 3,依此類推。如果用戶按下一個不在您指派的鍵中間的鍵,Choice.exe 將發出警告聲(即,它向控制臺發送一個 BEL 或 07h 字符)。如果 Choice.exe 檢測到錯誤情況,它就會返回錯誤值 255。如果用戶按 Ctrl+Break 或 Ctrl+C,Choice.exe 就會返回錯誤值 0。當您在批處理程序中使用錯誤值參數時,請將它們以降序列出。

示例
請在批處理文件中鍵入下列語法:
choice /c ync
運行 Choice.exe 時出現下列語句:
[Y,N,C]?
請在批處理文件中鍵入下列語法:
choice /c ync /n /m Yes, No or Continue?
運行 Choice.exe 時出現下列語句:
Yes, No, or Continue?
按如下方式將文字添加到語法中:
choice /c ync /m Yes, No, or Continue
運行 Choice.exe 時出現下列語句:
Yes, No, or Continue [Y,N,C]?
/t 命令行選項將設置一個時間限制(在該限制內用戶必須響應),並指定當用戶在該時間限制內沒有作出響應時將顯示的值。要將時間限制設置為五秒並指定 N 作為默認值,請在批處理程序中鍵入下列命令行:
choice /c ync /t 5 /d n
當批處理文件啟動 Choice.exe 時,將出現下列消息:
[Y,N,C]?
如果用戶未能在五秒鐘內按下一個鍵,Choice.exe 將選擇 N 並返回錯誤值 2。否則,Choice 將返回與用戶所選對應的值。

重命名程序日誌--批處理延時啟動的幾個方法