2012/10/24

*.bat相關-3

1、@
一般在它之後緊跟一條命令或一條語句,則此命令或語句本身在執行的時候不會顯示在屏幕上。請把下面的代碼保存為test.cmd文件,然後運行,比較一下兩條echo語句在屏幕上的輸出差異:
    echo a
    @pause
    @echo b
    @pause
執行結果如下:
        C:\Documents and Settings\JM\桌面>echo a
        a
        請按任意鍵繼續...
        b
        請按任意鍵繼續...
2、%、%%
百分號用在不同的場合,有不同的含義:
① 當百分號成對出現,並且其間包含非特殊字符時,一般做變量引用處理,比如:%var%、%str%。把以下代碼保存為批處理文件,運行後觀察屏幕顯示結果:
    @echo off
    set str=abc
    echo 變量 str 的值是: %str%
    pause
在屏幕上將顯示這樣的結果:
        變量 str 的值是: abc
        按任意鍵繼續...
另外,百分號作為變量引用還有一種特殊形式,那就是對形式參數的引用,此時,單個百分號後面緊跟0~9這10個數字,如%0、%1,其中,%0為腳本本身的名稱,%1至%9為第二至九個參數...最多支持%0~%9,%10以後就是變量引用了,即%15為%1的值接上5。
請看演示代碼:
    @echo off
    if defined str goto next
    set str=
    set /p str=請把文件拉到本窗口後回車:
    call "%~0" %str%
    pause
    exit
    :next
    cls
    echo 本批處理文件完整路徑為:"%~0"
    echo 拖到本窗口的文件完整路徑為:"%~1"
    goto :eof
② 出現在 set /a 語句中時,表示兩數相除取餘數,也就是所謂的模運算,它在命令行窗口和批處理文件中的寫法略有差異:在命令行窗口中,只需要單個的%,在批處理文件中,需要連續兩個百分號,寫成%%。
例如:在命令行窗口中,運行 set /a num=4%2 ,則結果將顯示0,因為4除以2的餘數為0;如果保存為批處理文件,則此語句將略有改變:
    @echo off
    set /a num=4%%2
    echo 4除以2的餘數為 %num%
    pause
③ 轉義符號:如果要顯示%本身時,需要在前面用%來轉義。例如:
    @echo off
    echo 一個百分號:%%
    echo 兩個百分號:%%%%
    echo 三個百分號:%%%%%%
    pause
3、:、::
① 以:打頭的單個的:表示該行是一個標籤,它之後的內容是一個標籤段,如:test,則表示:test之下的內容是標籤段,而test是這個標籤段的名,可 以用 goto test 、goto :test 跳轉到該標籤段或用 call :test 調用該子過程;而連續兩個冒號打頭表示該行內容為註釋內容,實際上,:: 是個無效的標籤名,:加上空格同樣可以起到註釋的作用,此時,::的功能和註釋命令rem相同;但是,rem 註釋語句中的某些命令符號如重定向符號和管道符號還是會執行,而如果用::來註釋的時候,與::同處一行的所有命令或符號直接被命令解釋器忽略掉,無形中 提高了註釋的兼容性和整個程序的執行效率,並且在眾多的命令語句中更顯得醒目,所以,註釋語句推薦使用::的格式。
② 在 set 語句中:和~同時使用時,: 起到截取字符串的功能。假設 set str=abcde,那麼,set var=%str:~0,1% 表示截取字符串abcde的第一個字符;和=同時使用時,起到替換字符串的功能。假設:set str=abc:de,那麼,set var=%str:a=1% 則表示把字符串abc:de中的a替換為1,set var=%str::=2% 則表示把字符串abc:de中的:替換為2;
4、~
① 用在 set 語句中,和:同時使用時,起到截取字符串的功能,請參考上一條的解釋;
② 用在 set /a 語句中時,它是一元運算符號,表示將操作數字按位取反,例如,set /a num=~1的執行結果是-2,set /a num=~0的結果是-1
③ 用在for語句中,表示增強for的功能,能夠提取到更多的信息。例如:在批處理文件的for語句中:%%~i表示去掉第一對外側引號,%%~zi表示獲 取文件的大小(以字節為單位),%%~ni表示獲取文件名,%%~xi表示獲取擴展名(帶點號)……它們可以組合使用,如%%~nxi表示獲取文件名和後 綴名。
5、>、>>
一般而言,>表示用新內容覆蓋原文件內容,>>表示向原文件追加內容,此時,它們以重定向符號的身份出現;如果用在 set /a 語句中,則>表示分組,>>表示邏輯移位;
6、|
一般而言,它以管道符號的身份出現,表示把在它之前的命令或語句的執行結果作為在它之後的命令或語句的處理對象,簡而言之,就是 把它之前的輸出作為它之後的輸入,例如:echo abcd|findstr "b",表示把echo abcd的執行結果,作為findstr "b" 的執行對象,也就是在字符串abcd中查找b字符;如果test.txt中有abcd字符串,則該語句與 findstr "b" test.txt 具有同樣的效果;
7、^
一般而言,^以轉義字符的身份出現。因為在 cmd環境中,有些字符具備特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示語句連接……它 們都有特定的功能,如果需要把它們作為字符輸出的話,echo >、echo | ……之類的寫法就會出錯——cmd解釋器會把它們作為具有特殊功能的字符對待,而不會作為普通字符處理,這個時候,就需要對這些特殊字符做轉義處理:在每 個特殊字符前加上轉義字符^,因此,要輸出這些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之類的格式來處理;
8、&
一般而言,&表示兩條命令或語句同時執行的意思。如 echo a&echo b,將在屏幕上同時顯示a和b字符。當幾條語句含義近似或作用相同且沒有先後的順序之別時,啟用&符號連接這些語句將會增加程序的可讀性;
9、&&、||
這是一對含義截然相反的命令符,&&表示如果它之前的語句成功執行,將執行它之後的語句,而||則表示如果它之前的語句執行失敗,將執行它之後的語句;在某些場合,它們能替代 if……else…… 語句;例如:
    @echo off
    md test&&echo 成功創建文件夾test||echo 創建文件夾test失敗
    pause
效果等同於如下代碼:
    @echo off
    md test
    if "%errorlevel%"=="0" (echo 成功創建文件夾test) else echo 創建文件夾test失敗
    pause
10、()
小括號對經常出現在for語句和if語句中,還有一些特定場合;在for和if語句中屬於語句格式的要求,例如:
① for %%i in (語句1) do (語句2):在這條語句中,語句1必須用括號對包圍,而語句2的括號對則可視情況予以拋棄或保留:如果語句2是單條語句或用&、& &、||等連接符號連接的多條語句,括號對可以拋棄,如果語句2是有邏輯先後關係的多條語句集合,則必須保留括號對,並且,多條語句必須斷行書 寫;例如:
    @echo off
    for %%i in (a b c) do echo %%i&echo --------
    pause
也可以改寫為:
    @echo off
    for %%i in (a b c) do (
        echo %%i
        &echo --------
    )
    pause
② if 條件 (語句1) else (語句2):如果沒有else部分,則語句1的括號對可有可無;如果有else部分,則語句1中的括號對必須保留,此時,語句2中的括號對保留與否,和上一點類似。例如:
    @echo off
    if exist test.txt echo 當前目錄下有test.txt
    pause
    @echo off
    if exist test.txt (echo 當前目錄下有test.txt) else echo 當前目錄下沒有test.txt
    pause
    @echo off
    if exist test.txt (echo 當前目錄下有test.txt) else (
        echo 當前目錄下沒有test.txt
        pause
        cls
        echo 即將創建test.txt文件
        cd.>test.txt&&echo 成功創建test.txt
    )
    pause
③ 特定場合下使用括號對,不但可以使代碼邏輯清晰,增強可讀性,還可能會減少代碼量。比如用echo語句構造多行文本內容的時候:
    @echo off
    (
    echo 第一行
    echo 第二行
    echo 第三行
    )>test.txt
    start test.txt
如果不使用括號對的話,則需要使用如下代碼:
    @echo off
    echo 第一行>test.txt
    echo 第二行>>test.txt
    echo 第三行>>test.txt
    start test.txt
11、+、-、*、/
在 set /a 語句中,這些符號的含義分別為:加、減、乘、除。例如:set /a num=1+2-3*4/5。需要注意的是,這些運算符號遵循數學運算中的優先級順序:先乘除後加減,有括號的先算括號,並且,直接忽略小數點,因此,剛 才那個算式的結果是1而不是0或0.6。
另外,有可能會在代碼中看到這樣的寫法:set /a num+=1、set /a num-=1、set /a num*=1 和 set /a num/=1,這些表示累加、累減、累乘、累除,步長都是1,展開後的完整寫法為:set /a num=num+1、set /a num=num-1、set /a num=num*1 和 set /a num=num/1(set /a 語句中,變量引用可以忽略百分號對或感嘆號對,set /a num=%num%+1 與 set /a num=num+1 等同)
12、equ、neq、lss、leq、gtr、geq
這幾個命令符是if語句中常用到的數值比較符號,取自英文的關鍵字母,具體的含義為:
        命令符號        含義                英文解釋
        EQU                等於                equal
        NEQ                不等於                 not equal
        LSS                少於                 less than
        LEQ                少於或等於         less than or equal
        GTR                大於                 greater than
        GEQ                大於或等於         greater than or equal

*.bat相關-2

1.Format
格式化磁片以供 Windows 使用。

FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X] [/P:passes]
FORMAT volume [/V:label] [/Q] [/F:size] [/P:passes]
FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors] [/P:passes]
FORMAT volume [/V:label] [/Q] [/P:passes]
FORMAT volume [/Q]

  volume          指定磁碟機代號 (後接冒號)、掛接點或磁碟區名稱。
  /FS:filesystem  指定檔案系統的類型 (FAT、FAT32、exFAT、NTFS 或
                  UDF)。
  /V:label        指定磁碟區標籤。
  /Q              執行快速格式化。請注意,此參數會覆寫 /P。
  /C              只限 NTFS: 根據預設值,建立在新磁碟區上的檔案
                  會被壓縮。
  /X              視需要先將磁碟區解下。
                  所有在磁碟區上開啟的控制碼都不再是正確的。
  /R:revision     只限 UDF: 將格式限制為特定的 UDF 版本
                  (1.02, 1.50, 2.00, 2.01, 2.50)。預設版本是 2.01。
  /D              限 UDF 2.50: 會重複中繼資料。
  /A:size         覆寫預設的配置單位大小。建議在一般使用時,最好
                  使用預設值。
                  NTFS 支援 512、1024、2048、4096、8192、16K、32K 和 64K。
                  FAT 支援 512、1024、2048、4096、8192、16K、32K、64K、
                  (128K、256K 供磁區容量 > 512 位元組使用)。
                  FAT32 支援 512、1024、2048、4096、8192、16K、32K、64K、
                  (128K、256K 供磁區容量 > 512 位元組使用)。
                  exFAT 支援 512、1024、2048、4096、8192、16K、32K、64K、
                  128K、256K、512K、1M、2M、4M、8M、16M、32M。

                  請注意 FAT 及 FAT32 檔案系統強制限制
                  在磁碟區的叢集數目:

                  FAT: 叢集數目 <= 65526
                  FAT32: 65526 < 叢集數目 < 4177918

                  如果格式化發現使用指定的叢集大小無法符合
                  上面的要求,格式化將會自動停止
                  執行。

                  NTFS 壓縮不支援大於 4096 的配置
                  單位。

  /F:size         指定要格式化的軟碟大小 (1.44)
  /T:tracks       為磁片各面指定磁軌數量。
  /N:sectors      指定各條磁軌的磁碟區數量。
  /P:passes       0 磁碟區的每一個磁區通過次數。 此參數
                  不能用於 /Q
 
2.如何在批處理文件中使用參數  
批處理中可以使用參數,一般從%1到%9這九個,當有多個參數時需要用shift來移動
,這種情況並不多見,我們就不考慮它了。 
 
sample1:format.bat  a
@echo off 
if \%1\==\a\ format a:  
:format  
@format a:/q/u/auotset  
@echo please insert another disk to driver A.  
@pause  
@goto format 
 
3.Compound Command
a.&
Usage:第一條命令 & 第二條命令 [& 第三條命令...]  
用這種方法可以同時執行多條命令,而不管命令是否執行成功 
Sample:  
dir z: & dir c:\Ex4rch  

b.&& 
Usage:第一條命令 && 第二條命令 [&& 第三條命令...]  
用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一 
直沒有出錯則一直執行完所有命令
Sample:  
dir z: && dir c:\Ex4rch
 
c.||
Usage:第一條命令 || 第二條命令 [|| 第三條命令...]  
用這種方法可以同時執行多條命令,當碰到執行正確的命令後將不執行後面的命令, 
有出現正確的命令則一直執行完所有命令
 
4.|
Usage:第一條命令 | 第二條命令 [| 第三條命令...]  
將第一條命令的結果作為第二條命令的參數來使用,記得在unix中這種方式很常見。
sample:  
time /t D:\IP.log  
netstat -n -p tcp|find \:3389\>>D:\IP.log 
start Explorer  
TIME [/T | time]

僅鍵入 TIME 而不加上參數,可以顯示目前設定的時間,並且提示您輸入新的時
間。按 ENTER 鍵即可保持原來時間。

如果您啟用擴充命令,TIME 命令將會支援/T 參數,這個參數
會讓命令只輸出目前的時間,而不提示您輸入新時間。

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
搜尋檔案中的文字字串。

  /V        顯示所有不包含指定字串的行。
  /C        只顯示包含字串的行數。
  /N        顯示每一行及它的行號。
  /I        當搜尋字串時,忽略字元的大小寫。
  /OFF[LINE] 不要略過有離線屬性設定的檔案。
  "string"  指定要尋找的文字字串。
  [drive:][path]filename
            指定要尋找的檔案。

如果沒有指定路徑,FIND 會搜尋在提示字元中所輸入的文字
或者在其他的命令中搜尋。

5.>>>
將一條命令或某個程序輸出結果重定向到特定文件中, > 與 >>的區別在
>會清除調原有文件中的內容後寫入指定文件,而>>只會追加內容到指定文件中
,而不會改動其中的內容。  
sample1:  
echo hello world>>c:\hello.txt
 
6. fc
比較兩個檔案或兩組檔案並且顯示其中的不同之處


C [/A] [/C] [/L] [/LBn] [/N] [/T] [/U] [/W] [/nnnn] [drive1:][path1]filename1
         [drive2:][path2]filename2
C /B [drive1:][path1]filename1 [drive2:][path2]filename2

  /A         針對每組不同之處只要顯示其中的第一行和最後一行。
  /B         使用二進位的內容比較。
  /C         忽略字母的大小寫。
  /L         以 ASCII 文字檔案方式來比較檔案。
  /LBn       在指定的行數中設定容許的最多連續的檔案
             不相符。
  /N         在 ASCII 方式的比較中顯示行數。
  /OFF[LINE] 不以離線屬性組略過檔案。
  /T         不要將定位字元展開為空格。
  /U         以 UNICODE 文字檔案方式來比較檔案。
  /W         將空白字元 (定位字元和空格) 壓縮後再進行比較。
  /nnnn      指定在一處不相同之後必須相同的連
             續行數。
 [drive1:][path1]filename1
             指定要比較的第一個檔案或第一組檔案。
 [drive2:][path2]filename2
             指定要比較的第二個檔案或第二組檔案。
 
7.findstr
在檔案中搜尋字串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [strings] [[drive:][path]filename[ ...]]

  /B        如果是在行的開端,則符合類型。
  /E        如果是在行的尾端,則符合類型。
  /L        逐字使用搜尋字串。
  /R        使用搜尋字串為一般表示式。
  /S        在現存目錄及所有的子目錄中
            搜尋符合的檔案。
  /I        指定搜尋不區分大小寫。
  /X        列印完全符合的行數。
  /V        只列印不含相符字串的行數。
  /N        列印每一行符合的行數前的行編號。
  /M        只列印包含相符字串的檔案的檔案名稱。
  /O        列印每一個相符行之前的字元位移。
  /P        略過沒有可列印字元的檔案。
  /F:file   從指定的檔案讀取檔案清單 (/ 代表主控台)。
  /C:string 使用特定的字串作為逐字搜尋的字串。
  /G:file   從指定的檔案取得搜尋字串 (/ 代表主控台)。
  /D:dir    搜尋以分號隔開的目錄清單。
  strings   要搜尋的文字。
  [drive:][path]filename
            指定要搜尋的一個或多個檔案。

除非引數的字首有 /C,否則請以空格將多重搜尋
字串分開。例如,'FINDSTR "hello there" x.y'
將會在檔案 x.y 中搜尋 "hello",或 "there"。
'FINDSTR /C:"hello there" x.y' 將會在檔案
x.y 中搜尋 "hello there"。

常見表示快速對照表:
  .        萬用字元: 任何字元
  *        重複: 零或之前字元或類別發生數次
  ^        行的位置: 行的開頭
  $        行的位置: 行的結尾
  [class]  字元類別: 組的任何一個字元
  [^class] 顛倒的類別: 不成組的任何一個字元
  [x-y]    範圍: 在特定範圍內的任何字元
  \x       跳開: metacharacter x 的字面使用方法
  \  xyz\>    字的位置: 字的結尾

有關 FINDSTR 一般表示式的資訊,請參閱線上
命令參照。

2012/10/22

*.bat相關-1

1.Echo  
顯示訊息,或切換命令回應的開啟狀態。

  ECHO [ON | OFF]
  ECHO [message]

僅鍵入 ECHO 而不加上參數,可以顯示目前的 ECHO 設定。

2.@ 
表示不顯示@後面的命令。 
Sample:
@echo off 
@echo Now initializing the program,please wait a minute...  
@format X: /q/u/autoset 
(format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個
autoset這個參數給我們,效果和/y是一樣的。) 
 
3.Goto
將 cmd.exe 導向到批次程式裡標籤指定的位置。

GOTO label

  label   指定批次程式裡做為標籤名稱的文字字串。

標籤名稱必須單獨一行,並且以冒號開頭。

如果您啟用擴充命令,GOTO 命令的變更如下:

GOTO 命令接收到一個目標標籤: EOF,而此標籤會將控制
傳輸到目前批次指令檔的尾端。利用此簡單的方式,可不
必定義標籤便即離開批次指令檔。鍵入 CALL /? 以查看有關
CALL 擴充命令發揮此特性的描述。
 
4.Rem
在批次檔或 CONFIG.SYS 裡加上備註或說明。

REM [comment]
 
5.Pause
暫停執行批次程式,並且顯示以下訊息:
    請按任意鍵繼續 . . . 
Sample: 
@echo off  
:begin  
copy a:*.* d:\back  
echo Please put a new disk into driver A  
pause  
goto begin 
Driver A 中所有文件均複製到d:\back目錄下。顯示提示您將另一張磁片放入
Driver A 時,pause 命令會使程式暫停,以便更換磁,然後按任意鍵繼續處理。
 
6.Call
從批次程式中呼叫另一程式。

CALL [drive:][path]filename [batch-parameters]

  batch-parameters   指定批次程式所需要的命令列資訊。

如果您啟用擴充命令,CALL 命令的變更如下:

CALL 命令現在可以用標籤來當作 CALL 命令的目標。語法為:

    CALL :label arguments

這會用指定的 arguments 來建立一個新的批次檔檔案內容,而且控制權
會被傳到指定的 label 後的敘述。您必須經由達到批次指令檔的結尾兩
次來 "exit" 兩次。第一次您讀入批次檔結尾時,控制權會回到 CALL
描述的下一個敘述。而第二次則會結束批次檔的執行。請鍵入 GOTO /?
來獲得 GOTO :EOF 擴充命令的描述。 這個命令可以讓您從批次檔中
"return" 。

此外,批次檔參數的參考 (%0,%1 及其他) 已經做了如下的擴充:


    %* 在批次檔中,這代表所有的參數 (e.g. %1 %2 %3
        %4 %5 ...)

    批次參數的取代 (%n) 已經做了改進。  您現在可以選用下列的
    語法:

        %~1         - 展開 %1 且移除包圍的引號 (")
        %~f1        - 展開 %1 為一個完全符合的路徑名稱
        %~d1        - 只展開 %1 為磁碟機代號
        %~p1        - 只展開 %1 為路徑
        %~n1        - 只展開 %1 為檔名
        %~x1        - 只展開 %1 為副檔名
        %~s1        - 展開的路徑只包含短檔名
        %~a1        - 展開 %1 為檔案的檔案屬性
        %~t1        - 展開 %1 為檔案的日期/時間
        %~z1        - 展開 %1 為檔案的長度
        %~$PATH:1   - 搜尋所有列在 PATH 環境變數內的目錄且
                       展開 %1 為第一個找到的完全符合檔名。
                       如果沒有定義環境變數名稱或是搜尋找不
                       到檔案,則這個修飾元會展開成空字串。

    修正程式可合併使用,進而得到複合結果:

        %~dp1       - 只擴充 %1 到磁碟機代號和路徑
        %~nx1       - 只擴充 %1 到檔案名稱和副檔名
        %~dp$PATH:1 - 搜尋 %1 的 PATH 環境變數中所列的
                       目錄,並擴充至磁碟機代號和第一個
                       找到的路徑。
        %~ftza1     - 將 %1 擴充成 DIR ,和輸出行相同

    在上例中,%1 和 PATH 可被其他有效值取代。%~ 語法是
    以正確的引數數字作結尾。%~ 修正程式可能無法使用 %* 
 
7.Start
開始另一個視窗來執行指定的程式或命令。

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/AFFINITY ] [/WAIT] [/B] [command/program]
      [parameters]

    "title"     要在視窗標題列顯示的標題。
    path        開始目錄
    B           啟動應用程式但不建立新視窗。含有 ^C 控制碼的應用程式會被略過,
                除非應用程式啟用 ^C 程序,否則 ^Break 是唯一可以中斷應用程式的
                方法
    I           新環境會使用傳遞給 cmd.exe 的原始環境,而不是目前的環境。
    MIN         視窗最小化
    MAX         視窗最大化
    SEPARATE    在不同的記憶體空間啟動 16 位元視窗程式
    SHARED      在共用的記憶體空間啟動 16 位元視窗程式
    LOW         在 IDLE 優先類別中啟動應用程式
    NORMAL      在 NORMAL 優先類別中啟動應用程式
    HIGH        在 HIGH 優先類別中啟動應用程式
    REALTIME    在 REALTIME 優先類別中啟動應用程式
    ABOVENORMAL 在 ABOVENORMAL 優先類別中啟動應用程式
    BELOWNORMAL 在 BELOWNORMAL 優先類別中啟動應用程式
    AFFINITY    新的應用程式將具有指定處理器的相關性遮罩,以十六進位數字表示。
    WAIT        啟動應用程式並等待其結束
    command/program
                如果這是內部 cmd 命令或批次檔,命令處理器會使用 /K 參數執行
                cmd.exe。這表示視窗會保持到命令執行完成。

                如果這不是內部 cmd 命令或批次檔,它就是一個程式,它會以視窗程式
                或主控台應用程式的執行方式執行。
    parameters      這些是傳遞給 command/program 的參數。

注意: SEPERATE 與 SHARED 選項不支援 64 位元平台。

如果您啟用擴充命令,經由命令列或 START 命令的外部命令執行有以下改變:

可以經由打入檔案名稱的命令來利用檔名連結以啟動非執行檔。(例如 WORD.DOC
    會執行和 .DOC 副檔名連結的程式)。請參看 ASSOC 及 FTYPE 命令來了解
    如何在指令檔案中建立這些檔案連結。

當執行 32 位元的圖形介面應用程式時,CMD.EXE 並不會等應用程式停止才回到
    命令提示。但是如果從指令檔中執行時,則不會有這樣的行為。

當執行一個命令列時,其中第一個字串項是字串 "CMD " 且沒有副檔名或路徑指
    示,則 "CMD" 會被 COMSPEC 環境變數的值所取代。這會避免由目前目錄中
    選擇 CMD.EXE

當執行一個命令列時,其中第一個字串項不包含副檔名時,則 CMD.EXE 使用
    PATHEXT 環境變數的值來決定尋找哪個副檔名及用什麼順序來尋找。PATHEXT
    變數的預設值為:

        .COM;.EXE;.BAT;.CMD

    請注意這個語法和 PATH 變數相同,且用分號來隔開不同的項目。

當尋找執行檔時,若是任何副檔名都不符合,則會試著尋找是否有符合的目錄名稱。
如果有的話,START 命令會在那個路徑執行檔案管理員。若是從命令列執行,這就相
當於執行 CD /D 到那個路徑。
 
8.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,以此類推。
   如果使用者按的機碼是無效的選擇,工具會
   發出警告的嗶聲。如果工具偵測出錯誤情況,
   則會傳回 ERRORLEVEL 值等於 255。如果使用
   者按 CTRL+BREAK 或 CTRL+C,工具將傳回 ERRORLEVEL 值等於 0。
   當您在批次程式中使用 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"。
Sample:
choice /C YNC /M "按是(Y)、否(N)或取消(C)。"
if errorlevel==3 goto pC
if errorlevel==2 goto pN
if errorlevel==1 goto pY

:pY
echo press Y
goto :EOF

:pN
echo press N
goto :EOF

:pC
echo press C
goto :EOF


9.If
在批次檔中執行條件處理。

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

  NOT               表示 Windows 應該只有在條件為偽時才執行命令。

  ERRORLEVEL number 當上一個執行的程式傳回的結束碼大於或等於指定
                    數字時,則條件為真。

  string1==string2  當指定的文字字串相符合時,則條件為真。

  EXIST filename    如果指定的檔名存在時,則條件為真。

  command           指定當條件為真時所要執行的命令。命令之後可以
                    接著 ELSE 命令。當指定條件為偽時,緊接在 ELSE
                    命令之後的命令將會被執行。

ELSE 子句必須出現在 IF 之後的同一行。例如:

    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )

以下命令無法作用,因為 del 命令必須以換行字元來結尾:

    IF EXIST filename. del filename. ELSE echo filename. missing

下面命令也無法作用,因為 ELSE 命令必須在與 IF 命令同一行的結尾:

    IF EXIST filename. del filename.
    ELSE echo filename. missing

下面命令只有在寫成一行時才能作用:

    IF EXIST filename. (del filename.) ELSE echo filename. missing

如果您啟用擴充命令,IF 的變更如下:

    IF [/I] string1 compare-op string2 命令
    IF CMDEXTVERSION 數字命令
    IF DEFINED 變數命令

compare-op 可以是:

    EQU - 等於
    NEQ - 不等於
    LSS - 小於
    LEQ - 小於或等於
    GTR - 大於
    GEQ - 大於或等於

而如果指定 /I 參數,則執行區分大小寫的字串比對。此 /I 參數也可使用
string1==string2 格式於 IF 命令。這些比對是通用的,因為在比對中,如
果 string1 及 string2 兩者皆由十進位數字所構成,則字串將會轉換為數
字,並執行數字的比對。

CMDEXTVERSION 條件式的運作和 ERRORLEVEL 一樣,除非它和與擴充命令相
關的內部版本編號作比對。第一個版本為 1。若擴充命令大幅度地增強時就
再加 1。當擴充命令停用時,CMDEXTVERSION 條件式永遠不為真。

DEFINED 條件式的運作和 EXISTS 一樣,除非它帶有環境變數名稱,如果環
境變數已定義則傳回 true 值。

%ERRORLEVEL% 將擴充到代表目前 ERRORLEVEL 變數的一個字串,前提是已
經沒有名為 ERRORLEVEL 的環境變數,在這個情況下,您會得到它的值。使
用此值和上面的數字比對運算元,您可以作下列的選擇:

    goto answer %ERRORLEVEL%
    :answer0
    提示您鍵入 Y 加以確定
    :answer1
    提示您鍵入N 加以否定

您也可使用上面的數字比對:

    IF %ERRORLEVEL% LEQ 1 goto okay

%CMDCMDLINE% 將擴充到比 CMD.EXE 的任何處理程序更早傳給 CMD.EXE 的
原始命令列,前提是已經沒有名為 CMDCMDLINE 的環境變數,在這個情形下,
您會得到它的值。

%CMDEXTVERSION% 將擴充成一個表示目前 CMDEXTVERSION 值的字串,
表示沒有名為 CMDEXTVERSION 的環境變數。這種情況下您將會得到它的值。
 
10.erroelevel
if errorlevel / if not errorlevel 數字  待執行的命令 
如果返回碼等指定的數字,則條件成立,運行命令,否則運行下一句。  
如if errorlevel 2 goto x2    
DOS程序運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼  
為0、1。   
 
11.For
對一組檔案中的每個檔案執行指定的命令。

FOR %variable IN (set) DO 命令 [command-parameters]

  %variable 指定一個可以取代的參數。
  (set)      指定由一或多個檔案組成的檔案組。您可使用通配字元。
  command    指定命令來執行每一個檔案。
 command-parameters
             為所指定的命令指定變數或參數。

如果要在批次程式中使用 FOR 命令,請指定 %%variable,而不要指定
%variable。  變數名稱有大小寫的區分,所以 %i 不同於 %I。

如果您啟用擴充命令,則額外支援下列的 FOR 命令
格式:

FOR /D %variable IN (set) DO command  [command-parameters]

    如果 set 中包含萬用字元,則指定與目錄
    名稱相符,而不是與檔案名稱相符。

FOR /R [[drive:]path] %variable IN (set) DO command  [command-parameters]

    在樹狀目錄中切換 [drive:]路徑,並於樹狀目錄的每一個目錄下執行
    FOR 陳述式。如果未在 /R 之後指定目錄規格,則採用目前的目錄。
    如果 set 只是單一句點 (.) 字元,則它只會列舉樹狀目錄結構。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

    set 是從開頭到結尾一次跳一步的連續數字。所以 (1,1,5) 會產生
    連續值 (1 2 3 4 5) 而 (5,-1,1) 會產生連續值 (5 4 3 2 1)

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    或,如果使用 usebackq 選項:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]

    filenameset 可以是一個以上的檔案名稱。每個檔案都已開啟,
    讀取及處理過,才繼續進行下個檔案名稱組。處理檔案讀取的一致
    性,將它分成獨立的文字行,然後將每一行分析成零或更多的字串。
    用已找到的字串值為變數值,來呼叫 For 迴圈的內容。預設狀態,
    /F 傳出每個檔案的每一行中,以空格分隔的第一個字串。空白行
    會被略過。您可以指定 "options" 參數來覆寫預設的分析行為。
    這是有引號的字串,包含一個以上的關鍵字,來指定不同的分析
    選項。關鍵字是:

        eol=c           - 指定一個行尾註解字元
                          (只有一個)
        skip=n          - 指定在檔案開頭要掠過的
                          行數。
        delims=xxx      - 指定分隔符號的集合。  這會取代
                          預設的空白與定位字元的分隔符號集合。
        tokens=x,y,m-n  - 指定每一行的哪些文字串應該被
                          傳到 for 的內部以用來進行每一個重複操作。
                          這會導致額外的變數名稱被配置。
                          m-n 格式代表一個範圍,
                          指定了第 m 個到第 n 個字串項。
                          如果在 tokens= 字串的最後一個字元是
                          星號,則會配置一個額外的變數
                          來接收最後一個字串項被分析後
                          的其他文字。
        usebackq        - 指定新語義開始作用。
                          其中反括號的字串會被當作命令來執行,
                          而單引號字串是純文字字串。
                          此外還允許使用雙引號來
                          引用在 filenameset 內
                          的檔名。

    以下是一個範例:

FOR /F "eol=; tokens=2,3 delims=, " %%i in (myfile.txt) do @echo %%i %%j %%k

    這會分析 myfile.txt 檔案中的每一行,它不會去管以分號開頭的行數
    ,直接將第 2 個及第 3 個語法從每一行傳到 for 主體,而其語法是
    用逗號和/或空格分開的(delims不放在最後即使條件有空格不會被納
    入分隔條件)。請注意,for 主體陳述式參照 %i 以取得第
    二個語法,參照 %j 以取得第三個語法,使用 %k 取得第三個語法之
    後的剩餘字串。因為檔案名稱含有空格,您必須用雙引號來括住檔案名
    稱。要這樣使用雙引號,您必須使用 usebackq 參數。否則雙引號會被
    解譯成用來定義一般文字。

    使用 %i 明白地在 for 陳述式中宣告,並透過 tokens= option 使用
    %j 作暗式性的宣告。您可以藉由 tokens= line 來指定最多 26 個語
    法,前提是它宣告的變數不能高於字母 'z' 或 'Z'。請記住,FOR 變
    數是單一字元的,同時在任一時間內,您不能同時使用超過 52 個 FOR
    變數。

    您也可以使用 FOR /F 命令在立即字串中分析邏輯,方法是將括弧之間的
    filenameset 變成一個引號字串。它會被視為從檔案輸入的單行,並加
    以分析。

    最後,您可以使用 FOR /F 命令來分析一個命令的輸出。方法是將括弧
    內的 filenameset 變成單引號字串。它將被視為一個命令列,這個命令
    行將會傳到子 CMD.EXE,而輸出將會被擷取到記憶體中,當成檔案來分
    析。所以下列的範例:

        FOR /F "delims==" %%i IN ('set') DO @echo %%i

    將列舉目前環境中的環境變數名稱。

此外,已經加強了 FOR 變數參考的取代功能。
您現在可以選用下列的語法:

    %~I         - 展開 %I 且移除包圍的引號 (")
    %~fI        - 展開 %I 為一個完全符合的路徑名稱
    %~dI        - 只展開 %I 為磁碟機代號
    %~pI        - 只展開 %I 為路徑
    %~nI        - 只展開 %I 為檔名
    %~xI        - 只展開 %I 為副檔名
    %~sI        - 展開的路徑只包含短檔名
    %~aI        - 展開 %I 為檔案的檔案屬性
    %~tI        - 展開 %I 為檔案的日期/時間
    %~zI        - 展開 %I 檔案的長度
    %~$PATH:I   - 搜尋所有列在 PATH 環境變數內的目錄
                   且展開 %I 為
                   第一個找到的完全符合檔名。
                   如果沒有定義環境變數名稱
                   或是搜尋找不到檔案,
                   則這個修飾元會展開為
                   空字串。

修飾元可以合併使用以獲得綜合的結果:

    %~dpI       - 只展開 %I 為磁碟機代號與路徑
    %~nxI       - 只展開 %I 為檔名與副檔名
    %~fsI       - 只展開 %I 為含短檔名的完全路徑
    %~dp$PATH:i - 為 %I 搜尋所有列在 PATH 環境變數內的目錄
                   且展開第一個找到的項目為磁碟機代號及
                   路徑。
    %~ftzaI     - 展開 %I 為像 DIR 一樣的輸出行

在上面的範例中 %I 和 PATH 能用其他的合法值取代。%~ 語法是由合法的
FOR 變數名稱來終止。如果選用像 %I 的大寫名稱可以增加可讀性而且避免
和修飾元的混淆,因為這些並不區分大小寫。 
 
12.Set
顯示、設定或移除 cmd.exe 環境變數。

SET [variable=[string]]

  variable  指定環境變數名稱。
  string    指定設定給變數的一系列字元。

僅鍵入 SET 而不加上任何參數,可以顯示目前的環境變數。

如果您啟用了擴充命令,SET 命令有以下的改變:

如果執行 SET 命令而且只包含變數名稱,沒有等號或數值的話,
命令會顯示出所有字首符合 SET 命令中指定變數名稱的所有變數
值。例如:

    SET P

會列出所有以 'P' 為開頭的環境變數。

如果在目前的環境中找不到變數名稱,SET 命令會將 ERRORLEVEL
設為 1。

SET 命令不將等號 (=) 視為變數名稱的一部份。

有兩個新參數已經加到 SET 命令中:

    SET /A expression
    SET /P variable=[promptString]

/A 指定在等號右方的字串是一個要被運算的數字運算式。您可以用運
算式進行簡單的運算,而且支援下列的運算子 (依照運算優先順序由高
到低排列):

    ()                  - 組成一群
    ! ~ -               - 一元運算符
    * / %              - 數字運算元
    + -                 - 數字運算元
    << >>               - 邏輯位移
    &                   - 位元運算 and
    ^                   - 位元運算 exclusive or
    |                   - 位元運算 or
    = *= /= %= += -=   - 指定
    &= ^= |= <<= >>=
    ,                   - 運算式分隔字元

如果您使用了任何邏輯或餘數運算子,您必須將運算式兩邊括上引號。
任何在運算式中非數字的字串會被當作環境變數,並且在使用前會先將
這些環境變數轉換為數字。如果您所指定的環境變數名稱尚未在目前環
境中定義,那麼它的值會被設為 0。這可以讓您用環境變數值來做運算
,而不必打入所有的 % 符號來取得它的值。如果 SET /A 是用指令檔
之外的命令列執行,它會顯示運算式最後的數值。指定運算子需要有個
環境變數在等號的左方。0x 字首在數字前方代表十六進位數字、0b 字
首代表二進位數字或 0 字首代表八進位數字,否則數字值都是指十進位
數字。所以 0x12 就和 18、022 等相同。請注意八進位數字可能容易
弄錯: 像 08 和 09 就不是正確的數字,因為 8 和 9 並不是八進位的
正確數字。

/P 參數讓您設定命令列的使用者輸入變數值。在讀取輸入命令列之前,
顯示指定的 promptString。promptString 可以是空白。

環境變數取代功能已經有下列增強:

    %PATH:str1=str2%

會將 PATH 環境變數展開,取代每個發現的 "str1" 與 "str2"的擴充結果。
"str2" 可以是空白字串,這會從擴充輸出中刪除全部 "str1"。"str1" 可以
用星號開始,這將會從擴充輸出的開頭開始,對應到從所有第一個發現含有
str1 的項目。

您也可以為擴充功能指定子字串。

    %PATH:~10,5%

這將會擴充 PATH 環境變數,然後只使用擴充結果的第 11 個(位移 10)字元
後的 5 個字元如果長度未指定,將會預設為上次使用的變數值。如果數字(位
移或長度)是負數,使用的數字將會是環境變數的長度加上位移或指定長度。

    %PATH:~-10%

將抽出 PATH 變數的最後 10 個字元。

    %PATH:~0,-2%

將抽出 PATH 變數的最後 2 個字元。

最後,系統加入了延遲環境變數展開的支援。在預設狀態下,命令展開會啟
用這項支援,但是您可以在 CMD.EXE 用 /V 命令列參數來啟用/停用這個功
能。 請參看 CMD /?

延遲環境變數展開功能可用來避開展開功能限制。這項限制是發生在命令列
讀取過程,不是發生在執行過程。下面的範例說明了立即展開變數時會發生
的問題:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after;
        if "%VAR%" == "after" @echo If you see this, it worked
    )

這個例子永遠無法顯示 echo 訊息,因為在兩個 IF 敘述中的 %VAR% 會
在第一個 IF 敘述被讀入時便被展開。這是因為它是邏輯上包含了 IF 的內
部,而內部又是一個複合敘述。  所以在複合敘述內的 IF 實際上是用
"before" 和 "after" 來比較,而這永遠不會為真。同樣的,下面的例子也
不會作用:

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

這個例子中並不會建立目前目錄中所有檔案的清單,相反的只會將 LIST 變
數設為最後一個找到的檔案。同樣地,這是因為 %LIST% 只有在 FOR 敘述
第一次被讀入時才展開,此時 LIST 變數是空的。所以我們實際執行的 FOR
迴圈是:

    for %i in (*) do set LIST= %i

這只是重複的將 LIST 設為最後找到的檔案。

延遲環境變數展開讓您可以用一個不同的字元 (驚嘆號) 在執行時展開
環境變數。如果啟用了延遲環境變數展開,上面的例子可以被改寫如下
而正常作用:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo If you see this, it worked
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

如果您啟用了命令擴充,有幾個動態環境變數會被展開但是不會出現在 SET
所顯示的環境變數列表中。這些變數的值會每次在這些變數被展開時動態地
重新計算如果使用者用這些變數的名稱來定義變數時,則這個新定義會覆蓋
以下所列的動態變數:

%CD% - 展開為含目前目錄的字串。

%DATE% - 展開為與 DATE 命令格式相同的目前日期字串。

%TIME% - 展開為與 TIME 命令格式相同的目前時間字串。

%RANDOM% - 展開為一個在 0 和 32767 之間的整數亂數值。

%ERRORLEVEL% - 展開為目前的 ERRORLEVEL 值

%CMDEXTVERSION% - 展開為目前的命令處理擴充功能的版本號碼。

%CMDCMDLINE% - 展開為執行命令處理器前的原始命令列。 
 
13.cmd 
啟動一個 Windows 命令直譯器的新例項

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      執行字串中所描述的命令然後結束命令視窗
/K      執行字串中所描述的命令然後保留命令視窗
/S      修改字串在 /C 或 /K (參看下方)
/Q      關閉 echo
/D      從登錄中停用 AutoRun 命令(參看下方)
/A      將內部命令輸出結果以 ANSI 格式導向 pipe 或檔案
/U      將內部命令輸出結果以 Unicode 格式導向 pipe 或檔案
/T:fg   設定幕前/幕後色彩 (參看 COLOR /?)
/E:ON   啟用命令延伸 (參看下方)
/E:OFF  停用命令延伸 (參看下方)
/F:ON   啟用檔案及目錄名稱完整字元(參看下方)
/F:OFF  停用檔案及目錄名稱完整字元(參看下方)
/V:ON   啟用延遲環境變數延伸,用 ! 作為分隔字元。例如, /V:ON
        可以讓 !var! 在執行時展開變數 var。文法 var 則會在
        輸入時展開變數,這在 FOR 迴圈之中是完全不同的事。
/V:OFF  停用延遲環境變數展開

請注意用命令分隔字元 '&&' 隔開的多個命令如果被引號包含時則會
被當成字串來接受。此外,為了相容性的原因,/X 的作用與 /E:ON
相同; /Y 與 /E:OFF 相同且 /R 與 /C 相同。其餘的參數則會被忽
略。

如果指定了/C 或 /K,則在參數後的其餘命令列會被當成命令列來處
理,其中使用下面的邏輯來處理引號字元 (") :

    1.  如果所有下列條件都符合,那麼命令列上的引號會被保留:

        - 沒有 /S 參數
        - 正好有兩個引號
        - 在兩個引號之間沒有下列特殊字元: <>()@^|
        - 兩個引號之間有一些空格
        - 在兩個引號之間的字串是執行檔的檔案名稱。

    2.  否則,如果第一個字元是引號,舊的命令列會把前置字元去
        掉,並將命令列中第一個引號及最後一個引號之間的所有文
        字變成保留文字。

如果您在命令列中未指定 /D,當 CMD.EXE 起動後,
它會尋找下列 REG_SZ/REG_EXPAND_SZ的 登錄變數。如果
有一個存在或兩個都存在,命令會執行第一個變數。

HKEY_LOCAL_MACHINE\Software\Microsoft\CommandProcessor\AutoRun

及/或

HKEY_CURRENT_USER\Software\Microsoft\CommandProcessor\AutoRun

將命令擴充功能預設成啟用狀態。您可以在特定的呼叫中,用 /E:OFF
參數來停用擴充功能。您可以啟用或停用一台電腦上或使用者登入工作
階段中所有 CMD.EXE 呼叫的擴充功能,如果您要這樣作,請使用
REGEDIT.EXE 來設定以下的 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

        及/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

到 0x1 或 0x0。使用者指定設定的執行優先順序高於電腦上的設定。命令
列參數的執行優先順序高於登錄中的設定值。


擴充命令包括下列命令的變更及(或)新增:

    DEL or ERASE
    COLOR
    CD or CHDIR
    MD or MKDIR
    PROMPT
    PUSHD
    POPD
    SET
    SETLOCAL
    ENDLOCAL
    IF
    FOR
    CALL
    SHIFT
    GOTO
    START (也包括援用外部命令之變更)
    ASSOC
    FTYPE

請鍵入 HELP 命令名稱,以查閱說明。

預設狀態下,不會啟用延遲環境變數擴充。您可以使用 /V:ON 或 /V:OFF 參數在
執行 CMD.EXE 時啟用或停用延遲擴充。您也可以用 REGEDIT.EXE 來修改以下
REG_DWORD 值,來啟用或停用整個電腦上或使用者登入工作階段中所有 CMD.EXE
的檔案名稱完整功能:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

        及/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

其值可為 0x1 或 0x0。使用者指定設定的優先順序高於電腦設定。命令列參數
優先順序高於登錄設定值。

如果已啟用延遲環境變數擴充,驚嘆號字元會在執行時被用來取代環境變數值。

您可以為特定的 CMD.EXE 呼叫,以 /F:ON 或 /F:OFF 開關啟用或停用檔案
名稱完成。 您可以啟用或停用在同一部電腦上所有 CMD.EXE 的呼叫完成
及/或使用者登入工作階段。方法是使用 REGEDIT.EXE 設定其一或兩者登錄
中的 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionCha

        及/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

用於特定功能的控制字元十六進位值 (例如 0x4 是 Ctrl-D 以及 0x6 是
Ctrl-F)。使用者指定設定的執行優先順序高於電腦上的設定。命令列參數
的執行優先順序高於登錄中的設定值。

如果以 /F:ON 開關啟用完成,則用於目錄名稱完成的控制字元是 Ctrl-D
而用於檔案名稱完成的控制字元是 Ctrl-F。如果您要停用在登錄中的特定
完成字元,請使用空間值 (0x20),因為它不是正確的控制字元。

當您鍵入其中一個控制字元後,完成功能會被啟動。如果路徑字串已存在,
而且所建立的路徑清單也符合的話,完成函數會讀取到指標所在左方為止
的路徑字串。然後它會顯示第一個符合的路徑。如果找不到符合的路徑,
它會發出嗶聲並保留顯示。如果您重覆按相同的控制字元,它將在符合的路
徑清單中循環執行。如果您同時按下 Shift 鍵與控制字元,可在清單中反
向移動。如果您進行編輯後再按控制字元的話,已儲存的符合路徑清單會被
丟棄,並建立新的清單。如果您在檔案及目錄完成功能之間切換,會有同樣
的情況發生。這兩個控制字元不同之處是:檔案完成字元可同時對應檔案及
目錄名稱,而目錄完成字元只能對應目錄名稱。如果您將檔案完成功能用在
內建目錄命令上 (CD,MD 或 RD) 也等於使用了目錄完成功能。

如果您在路徑字串兩端加上引號,完成功能鍵就可正確處理包含空格或其他
特殊字元的檔案名稱。還有,如果您備份後,又在命令列中呼叫完成功能的
話,已呼叫過完成功能的指標右方的文字會被丟棄。

要求加上引號的特殊字元有:
     
     &()[]{}^=;!'+,`~