1. 如何定義行號?
:<label>
可以定義任意長(cháng)度的 label 并且中間允許有空格,但是 MS-DOS 只區分其中的前 8 個(gè)字符,以冒號開(kāi)頭的腳本文件行不被處理。
行號同樣不區分大小寫(xiě)。行號的冒號前面可以有空白符號。
2. 如何使用 GOTO 語(yǔ)句?
GOTO <label>
<label> 一般為所定義的行號,如果命令擴展被允許( default )也可以用命令跳轉到文件末尾:
GOTO :EOF
:EOF 不區分大小寫(xiě)
如果命令找不到需要跳轉的行好位置,則顯示:
Label not found
3. 如何使用 For 循環(huán)語(yǔ)句?
FOR {%<var>|%%<var>} IN (<set>) DO <command>
FOR 語(yǔ)句可以在命令行和腳本文件中使用,在腳本文件中使用,變量定義和引用用 %% ;在命令行中使用,變量定義和引用用 % 。變量名是大小寫(xiě)敏感的,并且可以用除了 0 到 9 任意的單個(gè)字符(不包含元符號),這點(diǎn)比較特殊。 DO 后面是需要執行的語(yǔ)句, 循環(huán)變量的定義域在 DO 子句中。
<set> 有多種形式考慮:
l 可以是字符串的集合,中間用空白符分割:
<string> <string> <string>
l 可以是通配符展開(kāi)的 文件名或路徑名
*.bat *.?ml
另外文件名還可以是特殊的字符 , 當前目錄 (.) 和上級目錄( .. )
這些內容之間可以通過(guò)分隔符分開(kāi),分隔符是空白、分號、逗號、雙引號,注意引號本身會(huì )傳遞到循環(huán)變量中去, 而分號和逗號則不會(huì ),另外如果其他三種分隔符出現在雙引號中,他們會(huì )被傳遞到循環(huán)變量中去。
可以對不同種類(lèi)的 <set> 值進(jìn)行遍歷:
l 對字符串遍歷
FOR %%<var> IN (<string-set>) DO <command>
l 對文件進(jìn)行遍歷
FOR %%<var> IN (<file-path-name-wildcard>) DO <command>
下面的命令需要命令擴展打開(kāi)
l 對目錄進(jìn)行遍歷
FOR /D %%<var> IN (<dir-path-name-wildcard>) DO <command>
l 遞歸遍歷文件樹(shù)
FOR /R [[<driver>:]<path>] %%<var> IN (<set>) DO <command>
如果沒(méi)有目錄指定,則默認從當前目錄開(kāi)始。
l 進(jìn)行步長(cháng)型循環(huán)
FOR /L %%<var> IN (<start> <step> <end>) DO <command>
其中 <start> <step> <end> 是整數(其他數會(huì )取整),無(wú)法解釋的字符串認為是 0 ,可以遞增或遞減。
l 文件遍歷和解析
FOR /F ["<parsing-keywords>"] %%<var> IN (<set>) DO <command>
其中 <parsing-keywords> 的形式(大小寫(xiě)不敏感)如下:
eof=<c> #<c> 是一個(gè)字符的行結束符,默認是 newline 字符,行結束符后面認為是注釋
skip=<N> #<N> 是從行首跳過(guò)的行數,默認是 0
delims=<xxx> #<xxx> 是記錄字段的分隔符集,默認是空格和 <tab> ,覆蓋默認會(huì )提取空白
tokens=[{<X>,|<M>-<N>,}…][*] # 指定提取的記錄字段,默認是 1 ,最后的 * 代表剩余字段
# 剩余字段不會(huì )去除分隔符,但是去除注釋
usebackq # 使用 back quotation 作為命令的引用符(見(jiàn) <set> 的格式),默認是不使用
如果不使用 usebackq 選項, <set> 的形式:
<file-set> #no quotation
“<literal-string>” #double quotation
‘<command>’ #single quotation
如果使用 useback 選項, <set> 的形式:
“<file-set>” # double quotation
‘<literal-string>’ #single quotation
`<command>` #back quotation
關(guān)于隱含變量,只需指定首個(gè)變量的字母,其它按順序依次排列,最多可以定義 26 個(gè)變量。(大小寫(xiě)敏感)
FOR 語(yǔ)句中的變量名同樣可以展開(kāi)為:
%%~[{f|d|a|z|s|n|x|t|p}][$<var>:]<c>
4. IF
條件語(yǔ)句的語(yǔ)法格式為:
IF [NOT] <condition> <command> [ELSE <command>]
其中 NOT 表示條件真值去反。
利用不同的 <condition>, 我們可以判斷
l ERROR-LEVEL:
ERRORLEVEL <n>
等于或大于 <n> 的錯誤發(fā)生時(shí)為真
l 字符串相等
<string>==<string>
字符串相等,不需要用引號環(huán)繞
l 文件存在
EXIST <file-or-dir-name>
下面需要命令擴展打開(kāi)
l 字符串比較
[/I] <string> <comparator> <string>
/I 選項打開(kāi)則比較是 case-insensitive, 如果都是數字作比較,則轉為用數值比較,只能比較整數,比較浮點(diǎn)數則采用字符串比較法。
比較操作符 ( 大小寫(xiě)不敏感 ) 包括:
EQU ( 等于 ) 、 LSS ( 小于 ) 、 GTR ( 大于 ) 、 GEQ( 大于等于 ) 、 LEQ( 小于等于 ) 、 NEQ( 不等)
l 命令行擴展版本
CMDEXTVERSION <n>
當命令擴展版本號大于或等于 <n> 時(shí)為真,該值最低版本為 1
l 變量定義
DEFINE <var-name>
如果變量的定義存在則為真
則自動(dòng)增加一下變量定義
- %ERRORLEVEL% 定義為當前的即上次命令行執行產(chǎn)生的 errorlevel (一定有定義)
- %CMDCMDLINE% 定義為上次傳遞給命令解釋器 (cmd.exe) 的未經(jīng)處理的原始命令行。 (如果 %CMDCMDLINE% 未被定義,否則不影響原始值)
- %CMDEXTVERSION% 定義為當前命令擴展的版本號(如果 % CMDEXTVERSION % 未被定義,否則不影響原始值)
如果使用 ELSE 語(yǔ)句應當用以下形式,因為必須用復合語(yǔ)句或 newline 來(lái)結束 <command>:
IF [NOT] <condition> (
<command>
) ELSE IF (
<command>
) ELSE (
<command>
)
或者:
IF [NOT] <condition> (<command>) ELSE (<command>)
5. CHOICE
選項分支命令,格式如下:
CHOICE [/c [<choices>]] [/n] [/cs] [/t <timeout> /d <default>] [/m <msg>]
其中 /c 選項指定用戶(hù)的選擇鍵,默認是 yn ,其顯示為:
[Y, N]?
/cs 指定大小寫(xiě)敏感選擇,默認不敏感,如果不敏感則提示選擇鍵都采用大寫(xiě)字符。
/n 隱藏鍵提示信息。
/t 指定超時(shí)時(shí)間 (second) ,根據版本不同可能會(huì )顯示遞減的計時(shí)數字,默認不超時(shí)。
/d 超時(shí)后的默認選項。
/m 指定提示信息,顯示在選擇鍵提示前面。
注意,該命令不是所有的命令解釋器都支持。
該命令返回用戶(hù)選擇鍵的序號 ( 從 1 開(kāi)始 ) 作為 errorlevel 的值 , 可由 IF 語(yǔ)句判斷。
6. 如何定義組合語(yǔ)句 ?
在上述控制語(yǔ)句中,如 DO 、 IF/ELSE 結構中,經(jīng)常會(huì )嵌入一段代碼,由幾條語(yǔ)句構成,這時(shí)候需要定義組合語(yǔ)句,甚至在有些結構中,例如 IF/ELSE ,即使只有一條語(yǔ)句也寫(xiě)成組合語(yǔ)句的形式。組合語(yǔ)句定義如下:
(
<command-lines>
)
特別是 <command-lines> 為空,即可以定義空語(yǔ)句。
多個(gè)命令在一行時(shí)需要用 & 來(lái)分隔。聯(lián)系客服