3、choice
choice 使用此命令可讓用戶輸入一個字符(用於選擇),從而根據用戶的選擇返回不一樣的errorlevel,而後於if errorlevel配合,根據用戶的選擇運行不一樣的命令。
注意:choice命令爲DOS或者Windows系統提供的
外部命令,不一樣版本的choice命令語法會稍有不一樣,請用choice /?查看用法。
choice的命令語法(該語法爲Windows 2003中choice命令的語法,其它版本的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。"
若是我
運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
屏幕上會顯示:
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?
例
test
.bat的內容以下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批處理運行後,將顯示「defrag,mem,end[D,M,E]?」 ,用戶可選擇d m e ,而後if語句根據用戶的選擇做出判斷,d表示執行標號爲defrag的
程序段,m表示執行標號爲mem的程序段,e表示執行標號爲end的程序段,每一個程序段最後都以goto end將程序跳到end標號處,而後程序將顯示good bye,批處理運行結束。
4、for
for 循環命令,只要條件符合,它將屢次執行同一命令。
語法:
對一組文件中的每個文件執行某個特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的參數。
command 指定對每一個文件執行的命令。
command-parameters 爲特定命令指定參數或命令行開關。
for %%c in (*
.bat, *.txt) do type %%c
則該命令行會顯示
當前目錄下全部以bat和txt爲擴展名的文件的內容。
批處理示例
1. IF-EXIST
1)
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
而後運行它:
C:\>TEST1.BAT
若是C:\存在AUTOEXEC.BAT文件,那麼它的內容就會被顯示出來,若是不存在,批處理就會提示你該文件不存在。
2)
接着再創建一個test2.
bat文件,內容以下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist
執行:
C:\>TEST2 AUTOEXEC.BAT
該命令運行結果同上。
說明:
(1) IF EXIST 是用來測試文件是否存在的,格式爲 IF EXIST [
路徑+文件名] 命令
(2) test2.
bat文件中的%1是參數,DOS容許傳遞9個批參數信息給
批處理文件,分別爲%1~%9(%0表示test2命令自己) ,這有點象編程中的
實參和形參的關係,%1是形參,AUTOEXEC.BAT是實參。
3) 更進一步的,創建一個名爲TEST3.BAT的文件,內容以下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN
若是運行:
C:\>TEST3 A B C
屏幕上會顯示:
XIAO
TIAN
XIN
若是運行:
C:\>TEST3 A B
屏幕上會顯示
XIAO
TIAN
在這個命令執行過程當中,DOS會將一個空字符串指定給參數%3。
二、IF-ERRORLEVEL
創建TEST4.BAT,內容以下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件
而後執行文件:
C:\>TEST4
若是文件拷貝成功,屏幕就會顯示「成功拷貝文件」,不然就會顯示「文件拷貝失敗」。
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,並且返回值必須依照從大到小次序順序判斷。所以下面的
批處理文件是錯誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶經過ctrl-c停止拷貝操做
IF ERRORLEVEL 3 ECHO 預置錯誤阻止文件拷貝操做
IF ERRORLEVEL 4 ECHO 拷貝過程當中寫盤錯誤
不管拷貝是否成功,後面的:
未找到拷貝文件
用戶經過ctrl-c停止拷貝操做
預置錯誤阻止文件拷貝操做
拷貝過程當中寫盤錯誤
都將顯示出來。
返回值:
backup 編程
0 備份成功
1 未找到備份文件
2 文件共享衝突阻止備份完成
3 用戶用ctrl-c停止備份
4 因爲致命的錯誤使備份操做停止
diskcomp
0 盤比較相同
1 盤比較不一樣
2 用戶經過ctrl-c停止比較操做
3 因爲致命的錯誤使比較操做停止
4 預置錯誤停止比較
diskcopy
0 盤拷貝操做成功
1 非致命盤讀/寫錯
2 用戶經過ctrl-c結束拷貝操做
3 因致命的處理錯誤使盤拷貝停止
4 預置錯誤阻止拷貝操做
format
0 格式化成功
3 用戶經過ctrl-c停止格式化處理
4 因致命的處理錯誤使格式化停止
5 在提示「proceed with format(y/n)?」下用戶鍵入n結束
xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶經過ctrl-c停止拷貝操做
4 預置錯誤阻止文件拷貝操做
5 拷貝過程當中寫盤錯誤