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