goto 與 : 聯(lián)用可實現(xiàn)執(zhí)行中途的跳轉(zhuǎn), 再結(jié)合 if 可實現(xiàn)執(zhí)行過程的條件分支, 多個 if 即可實現(xiàn)命令的分組, 類似 C 中 switch case 結(jié)構(gòu)或者 Basic 中的 select case 結(jié)構(gòu), 大規(guī)模且結(jié)構(gòu)化的命令分組即可實現(xiàn)高級語言中的函數(shù)功能. 以下是批處理和C/Basic在語法結(jié)構(gòu)上的對照:
/C[:]choices Specifies allowable keys. Default is YN 指定允許的按鍵(待選字符), 默認為YN /N Do not display choices and ? at end of prompt string. 不顯示提示字符串中的問號和待選字符 /S Treat choice keys as case sensitive. 處理待選字符時大小寫敏感 /T[:]c,nn Default choice to c after nn seconds 在 nn 秒后默認選擇 c text Prompt string to display 要顯示的提示字符串 ERRORLEVEL is set to offset of key user presses in choices. ERRORLEVEL 被設(shè)置為用戶鍵入的字符在待選字符中的偏移值 如果我運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。" 屏幕上會顯示: 確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?
例:test.bat的內(nèi)容如下(注意,用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語句根據(jù)用戶的選擇作出判斷,d表示執(zhí)行標(biāo)號為defrag的程序段,m表示執(zhí)行標(biāo)號為mem的程序段,e表示執(zhí)行標(biāo)號為end的程序段,每個程序段最后都以goto end將程序跳到end標(biāo)號處,然后程序?qū)@示good bye,批處理運行結(jié)束。
四、for 循環(huán)命令,只要條件符合,它將多次執(zhí)行同一命令。
語法: 對一組文件中的每一個文件執(zhí)行某個特定命令。
FOR %%variable IN (set) DO command [command-parameters]
例如一個批處理文件中有一行: for %%c in (*.bat *.txt) do type %%c
則該命令行會顯示當(dāng)前目錄下所有以bat和txt為擴展名的文件的內(nèi)容。
==== willsort 編注 ===================================================== 需要指出的是, 當(dāng)()中的字符串并非單個或多個文件名時, 它將單純被當(dāng)作字符串替換, 這個特性再加上()中可以嵌入多個字符串的特性, 很明顯 for 可以被看作一種遍歷型循環(huán). 當(dāng)然, 在 nt/2000/xp/2003 系列的命令行環(huán)境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字符串, 也有很多開關(guān)被用于擴展了文件替換功能. ========================================================================
批處理示例
1. IF-EXIST
1) 首先用記事本在C:\建立一個test1.bat批處理文件,文件內(nèi)容如下: @echo off IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
3) 更進一步的,建立一個名為TEST3.BAT的文件,內(nèi)容如下: @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
在這個命令執(zhí)行過程中,DOS會將一個空字符串指定給參數(shù)%3。
2、IF-ERRORLEVEL
建立TEST4.BAT,內(nèi)容如下: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 1 ECHO 文件拷貝失敗 IF ERRORLEVEL 0 ECHO 成功拷貝文件
然后執(zhí)行文件: 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 預(yù)置錯誤阻止文件拷貝操作 IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤