Windows XP中的命令列命令

chance2000發表於2006-09-03
Windows XP中的命令列命令
  CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF]
[/V:ON | /V:OFF][[/S] [/C | /K] string]
[@more@]其中:CMD是不可缺少的!
  /C   執行字串指定的命令然後終斷
  /K   執行字串指定的命令但保留
  /S   在 /C 或 /K 後修改字串處理(見下)
  /Q   關閉回應
  /D   從登錄檔中停用執行 AutoRun 命令(見下)
  /A   使向內部管道或檔案命令的輸出成為 ANSI
  /U   使向內部管道或檔案命令的輸出成為 Unicode
  /T:fg  設定前景/背景顏色(詳細資訊,請見 COLOR /?)
  /E:ON  啟用命令擴充套件(見下)
  /E:OFF 停用命令擴充套件(見下)
  /F:ON  啟用檔案和目錄名稱完成字元 (見下)
  /F:OFF 停用檔案和目錄名稱完成字元(見下)
  /V:ON  將 ! 作為定界符啟動延緩環境變數擴充套件。如: /V:ON 會允許 !var! 在執行時允許 !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_MACHINESoftwareMicrosoftCommand ProcessorAutoRun

    和/或

  HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun命令擴充套件是按預設值啟用的。您也可以使用 /E:OFF,為某一特定呼叫而停用擴充套件。您可以在機器上和/或使用者登入會話上啟用或停用 CMD.EXE 所有呼叫的擴充套件,這要透過設定使用REGEDT32.EXE 的登錄檔中的一個或兩個 REG_DWORD 值:

  HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorEnableExtensions

    和/或

  HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorEnableExtensions

  到 0x1 或 0x0。使用者特定設定比機器設定有優先權。命令列開關比登錄檔設定有優先權。以上是對於基本命令的介紹,下面包含的是命令列擴充套件部分。延遲變數環境擴充套件不按預設值啟用。您可以用/V:ON 或 /V:OFF
命令列開關,為 CMD.EXE 的某個呼叫而啟用或停用延遲環境變數擴充。

  您可以在機器上和/或使用者登入會話上啟用或停用 CMD.EXE 所有呼叫的完成,這要透過設定使用 REGEDT32.EXE 的登錄檔中的一個或兩個 REG_DWORD 值:

  HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorDelayedEXPansion

    和/或

  HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorDelayedEXPansion

  到 0x1 或 0x0。使用者特定設定比機器設定有優先權。命令列開關比登錄檔設定有優先權。
  如果延遲環境變數擴充被啟用,驚歎號字元可在執行時間,被用來代替一個環境變數的數值。檔案和目錄名完成不按預設值啟用。您可以用 /F:ON 或 /F:OFF命令列開關,為 CMD.EXE 的某個呼叫而啟用或停用檔名完成。 您可以在機器上和/或使用者登入會話上啟用或停用 CMD.EXE 所有呼叫的完成,這要透過設定使用 REGEDT32.EXE 的登錄檔中的一個或兩個REG_DWORD 值:

  HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorCompletionChar
  HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorPathCompletionChar

    和/或

  HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorCompletionChar
  HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorPathCompletionChar

  由一個控制字元的十六進位制值作為一個特定引數(例如,0x4 是Ctrl-D,0x6 是 Ctrl-F)。 使用者特定設定優先於機器設定。命令列開關優先於登錄檔設定。

  如果完成是用 /F:ON 命令列開關啟用的,兩個要使用的控制符是: 目錄名字完成用 Ctrl-D, 檔名完成用 Ctrl-F。 要停用登錄檔中的某個字元,請用空格(0x20)的數值,因為此字元不是控制字元。

  如果鍵入兩個控制字元中的一個,完成會被呼叫。完成功能將路徑字串帶到游標的左邊,如果沒有萬用字元,將萬用字元附加到左邊,並建立相符的路徑列表。然後,顯示第一個相符的路徑。如果沒有相符的路徑,則發出嘟嘟聲,不影響顯示。之後,重複按同一個控制字元會迴圈顯示相符路徑的列表。將 Shift 鍵跟控制字元同時按下,會倒著顯示列表。如果對該行進行了任何編輯,並再次按下控制字元,儲存的相符路徑的列表會被丟棄,新的會被生成。如果在檔案和目錄名完成之間切換,會發生同樣現象。兩個控制字元之間的唯一區別是檔案完成字元符合檔案和目錄名,而目錄完成字元只符合目錄名。如果檔案完成被用於內建式目錄命令(CD、MD 或 RD),就會使用目錄完成。

  將引號將相符路徑括起來,完成程式碼可以正確處理含有空格或其他特殊字元的檔名。同時,如果備份,然後從行內呼叫檔案完成,完成被呼叫是位於游標右方的文字會被丟棄。

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

  下面是命令列擴充套件的詳細應用方法介紹:熟悉dos的朋友會發現許多內容和dos相同。

  1、DEL 或 ERASE
  刪除一個或數個檔案。

  DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
  ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names    指定一個或數個檔案或目錄列表。萬用字元可被用來
        刪除多個檔案。如果指定了一個目錄,目錄中的所
        有檔案都會被刪除。

  /P     刪除每一個檔案之前提示確認。
  /F     強制刪除只讀檔案。
  /S     從所有子目錄刪除指定檔案。
  /Q     安靜模式。刪除全域性萬用字元時,不要求確認。
  /A     根據屬性選擇要刪除的檔案。
  attributes R 只讀檔案          S 系統檔案
        H 隱藏檔案          A 存檔檔案
        - 表示“否”的字首

  如果命令副檔名被啟用,DEL 和 ERASE 會如下改變:

  /S 開關的顯示句法會顛倒,即只顯示已經刪除的檔案,而不顯示找不到的檔案。

  2、COLOR
  設定預設的控制檯前景和背景顏色。
  COLOR [attr]
  attr  指定控制檯輸出的顏色屬性
顏色屬性由兩個十六進位制數字指定 -- 第一個為背景,第二個則為
前景。每個數字可以為以下任何值之一:
  0 = 黑色   8 = 灰色
  1 = 藍色   9 = 淡藍色
  2 = 綠色   A = 淡綠色
  3 = 湖藍色  B = 淡淺綠色
  4 = 紅色   C = 淡紅色
  5 = 紫色   D = 淡紫色
  6 = 黃色   E = 淡黃色
  7 = 白色   F = 亮白色
  如果沒有給定任何引數,該命令會將顏色還原到 CMD.EXE 啟動時的顏色。這個值來自當前控制檯視窗、/T 開關或DefaultColor 登錄檔值。
  如果用相同的前景和背景顏色來執行 COLOR 命令,COLOR 命令會將 ERRORLEVEL 設定為 1。
  例如: "COLOR fc" 在亮白色上產生亮紅色
  
  3、CD 或 CHDIR
  顯示當前目錄名或改變當前目錄。
  CHDIR [/D] [drive:][path]
  CHDIR [..]
  CD [/D] [drive:][path]
  CD [..]
  ..  指定要改成父目錄。
  鍵入 CD 驅動器: 顯示指定驅動器中的當前目錄。
  不帶引數只鍵入 CD,則顯示當前驅動器和目錄。
  使用 /D 命令列開關,除了改變驅動器的當前目錄之外,
  還可改變當前驅動器。
  如果擴充套件命令名被啟用,CHDIR 會如下改變:
  當前的目錄字串會被轉換成使用磁碟名上的大小寫。所以,如果磁碟上的大小寫如此,CD C : TEMP 會將當前目錄設為C:Temp。
  CHDIR 命令不把空格當作分隔符,因此有可能將目錄名改為一個帶有空格但不帶有引號的子目錄名。例如:
    cd Winntprofilesusernameprogramsstart menu
  與下列相同:
    cd "Winntprofilesusernameprogramsstart menu"
  在擴充套件功能停用的情況下,您必須鍵入以上命令。

  4、MD 或 MKDIR
  建立目錄。
  MKDIR [drive:]path
  MD [drive:]path
  如果命令副檔名被啟用,MKDIR 會如下改變:
  如果需要,MKDIR 會在路徑中建立中級目錄。例如: 假設 a 不存在,那麼:
  mkdir abcd
  與:
  mkdir a
  chdir a
  mkdir b
  chdir b
  mkdir c
  chdir c
  mkdir d
  相同。如果副檔名被停用,則需要鍵入 mkdir abcd。


  5、PROMPT
  更改 cmd.exe 命令提示符。
  PROMPT [text]
  text  指定新的命令提示符。
  提示符可以由普通字元及下列特定程式碼組成:
  $A  & (短 and 符號)
  $B  | (管道)
  $C  ( (左括弧)
  $D  當前日期
  $E  Escape code (ASCII 碼 27)
  $F  ) (右括弧)
  $G  > (大於符號)
  $H  Backspace (擦除前一個字元)
  $L  < (小於符號)
  $N  當前驅動器
  $P  當前驅動器及路徑
  $Q  = (等號)
  $S  (空格)
  $T  當前時間
  $V  Windows XP 版本號
  $_  換行
  $$  $ (貨幣符號)

  如果命令副檔名被啟用,PROMPT 命令會支援下列格式化字元:
  $+  根據 PUSHD 目錄堆疊的深度,零個或零個以上加號(+)字元;每個被推的層有一個字元。
  $M  如果當前驅動器不是網路驅動器,顯示跟當前驅動器號或空字串有關聯的遠端名。


  6、PUSHD
  儲存當前目錄以供 POPD 命令使用,然後改到指定的目錄。
  PUSHD [path | ..]
  path  指定要成為當前目錄的目錄。
  如果命令副檔名被啟用,除了一般驅動器號和路徑,PUSHD命令還接受網路路徑。如果指定了網路路徑,PUSHD 將建立一個指向指定網路資源的臨時驅動器號,然後再用剛定義的驅動器號改變當前的驅動器和目錄。可以從 Z: 往下分配臨時驅動器號,使用找到的第一個沒有用過的驅動器號。


  7、POPD
  命令選項到儲存在 PUSHD 命令裡的目錄。
  POPD
  如果命令副檔名被啟用,從推目錄堆疊 POPD 驅動器時,POPD命令會刪除 PUSHD 建立的臨時驅動器號。


  8、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 命令列開關指定等號右邊的字串為被評估的數字表示式。該表示式評估器很簡單並以遞減的優先權順序支援下列操作:
  ()         - 分組
  ! ~ -        - 一元運算子
  * / %        - 算數運算子
  + -         - 算數運算子
  << >>        - 邏輯移位
            - 按位“與”
  ^          - 按位“異”
  |          - 按位“或”
  = *= /= %= += -= - 賦值
  &= ^= |= <<= >>=
            - 表示式分隔符

  如果您使用任何邏輯或取餘運算子, 您需要將表示式字串用引號擴起來。在表示式中的任何非數字字串鍵作為環境變數名稱,這些環境變數名稱的值已在使用前轉換成數字。如果指定了一個環境變數名稱,但未在當前環境中定義,那麼值將被定為零。這使您可以使用環境變數值做計算而不用鍵入那些 % 符號來得到它們的值。如果 SET /A 在命令指令碼外的命令列執行的,那麼它顯示該表示式的最後值。該分配的運算子在分配的運算子左邊需要一個環境變數名稱。除十六進位制有 0x 字首,八進位制有 0 字首的,數字值為十進位數字。因此, 0x12 與 18 和 022相同。請注意八進位制公式可能很容易搞混: 08 和 09 是無效的數字,因為 8 和 9 不是有效的八進位制位數。
  /P 命令列開關允許將變數數值設成使用者輸入的一行輸入。讀取輸入行之前,顯示指定的 promptString。promptString 可以是空的。
  環境變數替換已如下增強:
  %PATH:str1=str2%
  會擴充套件 PATH 環境變數,用 "str2" 代替擴充套件結果中的每個 "str1"。
  要有效地從擴充套件結果中刪除所有的 "str1","str2" 可以是空的。
  "str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充套件結果的開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。
  也可以為副檔名指定子字串。
  %PATH:~10,5%
  會擴充套件 PATH 環境變數,然後只使用在擴充套件結果中從第 11 個(偏移量 10)字元開始的五個字元。如果沒有指定長度,則採用預設值,即變數數值的餘數。如果兩個數字(偏移量和長度)都是負數,使用的數字則是環境變數數值長度加上指定的偏移量或長度。
  %PATH:~-10%
  會提取 PATH 變數的最後十個字元。
  %PATH:~0,-2%
  會提取 PATH 變數的所有字元,除了最後兩個。
  終於新增了延遲環境變數擴充的支援。該支援總是按預設值被停用,但也可以透過 CMD.EXE 的 /V 命令列開關而被啟用/停用。
  考慮到讀取一行文字時所遇到的目前擴充的限制時,延遲環境變數擴充是很有用的,而不是執行的時候。以下例子說明直接變數擴充的問題:
  set VAR=before
  if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
  )

  不會顯示訊息,因為在讀到第一個 IF 語句時,BOTH 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% - 擴充套件到呼叫命令處理器的原始命令列。


  9、SETLOCAL
  開始批處理檔案中環境改動的本地化操作。在執行 SETLOCAL 之後所做的環境改動只限於批處理檔案。要還原原先的設定,必須執行 ENDLOCAL。達到批處理檔案結尾時,對於該批處理檔案的每個尚未執行的 SETLOCAL 命令,都會有一個隱含的 ENDLOCAL 被執行。
  SETLOCAL
  如果命令副檔名被啟用,SETLOCAL 會如下改變:
  SETLOCAL 批命令現在可以接受可選引數:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
    啟動或停用命令處理器副檔名。詳細資訊,請參閱 CMD /?。
    ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
      啟動或停用延緩環境變數副檔名。詳細資訊,請
      參閱 對SET的介紹 。
  無論在 SETLOCAL 命令之前它們的設定是什麼,這些修改會一直保留到匹配的 ENDLOCAL 命令。
  如果有一個引數,SETLOCAL 命令將設定 ERRORLEVEL 的值。
  如果有兩個有效引數中的一個,該值則為零。用下列技巧,您可以在批指令碼中使用這個來決定副檔名是否可用:
  VERIFY OTHER 2>nul
  SETLOCAL ENABLEEXTENSIONS
  IF ERRORLEVEL 1 echo Unable to enable extensions

  這個方法之所以有效,是因為在 CMD.EXE 的舊版本上,SETLOCAL不設定 ERRORLEVEL 值。具有不正確引數的 VERIFY 命令將ERRORLEVEL 值初始化成非零值。


  10、ENDLOCAL
  結束批處理檔案中環境改動的本地化操作。在執行ENDLOCAL 之後所做的環境改動不再僅限於批處理檔案。批處理檔案結束後,原先的設定無法還原。
  ENDLOCAL
  如果命令副檔名被啟用,ENDLOCAL 會如下改變:
  如果相應的 SETLOCAL 用新的 ENABLEEXTENSIONS 或DISABLEEXTENSIONS 選項啟用或停用了命令副檔名,那麼,在ENDLOCAL 之後,命令副檔名的啟用/停用狀態會還原到執行相應的 SETLOCAL 命令前的狀態。


  11、IF
  執行批處理程式中的條件處理。

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

  NOT      指定只有條件為 false 的情況下, Windows XP 才
          應該執行該命令。

  ERRORLEVEL number 如果最後執行的程式返回一個等於或大於指定數字的退出編碼,指定條件為 true。

  string1==string2 如果指定的文字字串匹配,指定條件為 true。

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

  command     如果符合條件,指定要執行的命令。如果指定的
條件為 FALSE,命令後可跟一個執行 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 string1 compare-op string2 command
  IF CMDEXTVERSION number command
  IF DEFINED variable command

  其中,比較運算子可以是:

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

  及 /I 開關;如果該開關被指定,則說明要進行的字串比較不分大小寫。/I 開關可以用於 IF 的 string1==string2 的形式上。這些比較都是通用的;原因是,如果 string1 和 string2 都是由數字組成的,字串會被轉換成數字,進行數字比較。

  CMDEXTVERSION 條件的作用跟 ERRORLEVEL 的一樣,除了它是在跟與命令副檔名有關聯的內部版本號比較。第一個版本是 1。每次對命令副檔名有相當大的增強時,版本號會增加一個。
  命令副檔名被停用時,CMDEXTVERSION 條件不是真的。

  如果已定義環境變數,DEFINED 條件的作用跟 EXISTS 的一樣,除了它取得一個環境變數,返回的結果是 true。
  如果沒有名為 ERRORLEVEL 的環境變數,%ERRORLEVEL%會擴充為 ERROLEVEL 當前數值的字串表示式;否則,您會得到其數值。執行程式後,以下語句說明 ERRORLEVEL 的用法:

  goto answer%ERRORLEVEL%
  :answer0
echo Program had return code 0
  :answer1
  echo Program had return code 1

  您也可以使用以上的數字比較:

  IF %ERRORLEVEL% LEQ 1 goto okay

  如果沒有名為 CMDCMDLINE 的環境變數,%CMDCMDLINE%將在 CMD.EXE 進行任何處理前擴充為傳遞給 CMD.EXE 的原始命令列;否則,您會得到其數值。

  如果沒有名為 CMDEXTVERSION 的環境變數,%CMDEXTVERSION% 會擴充為 CMDEXTVERSION 當前數值的
字串符表示式;否則,您會得到其數值。

  12、FOR
  FOR %variable IN (set) DO command [command-parameters]

  %variable 指定一個單一字母可替換的引數。
  (set)   指定一個或一組檔案。可以使用萬用字元。
  command  指定對每個檔案執行的命令。
  command-parameters
      為特定命令指定引數或命令列開關。

  在批處理檔案中使用 FOR 命令時,指定變數請使用 %%variable而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I.如果命令副檔名被啟用,下列額外的 FOR 命令格式會受到支援:

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

  如果集中包含萬用字元,則指定與目錄名匹配,而不與檔名匹配。

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

  檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的FOR 語句。如果在 /R 後沒有指定目錄,則使用當前目錄。如果集僅為一個單點(.)字元,則列舉該目錄樹。

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

  該集表示以增量形式從開始到結束的一個數字序列。
  因此,(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 為一個或多個檔名。繼續到 filenameset 中的下一個檔案之前,每份檔案都已被開啟、讀取並經過處理。
  處理包括讀取檔案,將其分成一行行的文字,然後將每行解析成零或更多的符號。然後用已找到的符號字串變數值呼叫 For 迴圈。以預設方式,/F 透過每個檔案的每一行中分開的第一個空白符號。跳過空白行。您可透過指定可選 "options"引數替代預設解析操作。這個帶引號的字串包括一個或多個指定不同解析選項的關鍵字。這些關鍵字為:

    eol=c      - 指一個行註釋字元的結尾(就一個)
    skip=n      - 指在檔案開始時忽略的行數。
    delims=xxx    - 指分隔符集。這個替換了空格和跳格鍵的預設分隔符集。
    tokens=x,y,m-n  - 指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變數名稱的分配。m-n格式為一個範圍。透過 nth 符號指定 mth。如果符號字串中的最後一個字元星號,那麼額外的變數將在最後一個符號解析之後分配並接受行的保留文字。
    usebackq     - 指定新語法已在下類情況中使用:
            在作為命令執行一個後引號的字串並且一個單引號字元為文字字串命令並允許在 filenameset中使用雙引號擴起檔名稱。

  某些範例可能有助:

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

  會分析 myfile.txt 中的每一行,忽略以分號打頭的那些行,將每行中的第二個和第三個符號傳遞給 for 程式體;用逗號和/或空格定界符號。請注意,這個 for 程式體的語句引用 %i 來取得第二個符號,引用 %j 來取得第三個符號,引用 %k來取得第三個符號後的所有剩餘符號。對於帶有空格的檔名,您需要用雙引號將檔名括起來。為了用這種方式來使用雙引號,您還需要使用 usebackq 選項,否則,雙引號會被理解成是用作定義某個要分析的字串的。

  %i 專門在 for 語句中得到說明,%j 和 %k 是透過tokens= 選項專門得到說明的。您可以透過 tokens= 一行指定最多 26 個符號,只要不試圖說明一個高於字母 'z' 或'Z' 的變數。請記住,FOR 變數是單一字母、分大小寫和全域性的;而且,同時不能有 52 個以上都在使用中。

  您還可以在相鄰字串上使用 FOR /F 分析邏輯;方法是,用單引號將括號之間的 filenameset 括起來。這樣,該字串會被當作一個檔案中的一個單一輸入行。

  最後,您可以用 FOR /F 命令來分析命令的輸出。方法是,將括號之間的 filenameset 變成一個反括字串。該字串會被當作命令列,傳遞到一個子 CMD.EXE,其輸出會被抓進記憶體,並被當作檔案分析。因此,以下例子:

  FOR /F "usebackq 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 - 查詢列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個完全合格的名稱。如果環境變數名未被定義,或者沒有找到檔案,此組合鍵會擴充到空字串

  可以組合修飾符來得到多重結果:

  %~dpI   - 僅將 %I 擴充到一個驅動器號和路徑
  %~nxI   - 僅將 %I 擴充到一個檔名和副檔名
  %~fsI   - 僅將 %I 擴充到一個帶有短名的完整路徑名
  %~dp$PATH:i - 查詢列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個驅動器號和路徑。
  %~ftzaI  - 將 %I 擴充到類似輸出線路的 DIR

  在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法用一個有效的 FOR 變數名終止。選取類似 %I 的大寫變數名比較易讀,而且避免與不分大小寫的組合鍵混淆。


  13、CALL
  從批處理程式呼叫另一個批處理程式。

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

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

  如果命令副檔名被啟用,CALL 會如下改變:

  CALL 命令現在將卷標當作 CALL 的目標接受。語法是:

  CALL:label arguments

  一個新的批檔案上下文由指定的引數所建立,控制在卷標被指定後傳遞到語句。您必須透過達到批指令碼檔案末兩次來 "exit" 兩次。
  第一次讀到檔案末時,控制會回到 CALL 語句的緊後面。第二次會退出批指令碼。鍵入 GOTO /?,參看 GOTO : EOF 副檔名的描述,此描述允許您從一個批指令碼返回。

  另外,批指令碼文字引數參照(%0、%1、等等)已如下改變:

  批指令碼里的 %* 指出所有的引數(如 %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- 在列在 PATH 環境變數中的目錄裡查詢 %1,並擴充套件到找到的第一個檔案的驅動器號和路徑。
  %~ftza1  - 將 %1 擴充套件到類似 DIR 的輸出行。

  在上面的例子中,%1 和 PATH 可以被其他有效數值替換。
  %~ 語法被一個有效引數號碼終止。%~ 修定符不能跟 %*
  使用


  14、SHIFT
  更改批處理檔案中可替換引數的位置。
  SHIFT [/n]
  如果命令副檔名被啟用,SHIFT 命令支援/n 命令列開關;該命令列開關告訴命令從第 n 個引數開始移位;n 介於零和八之間。例如:
  SHIFT /2
  會將 %3 移位到 %2,將 %4 移位到 %3,等等;並且不影響 %0 和 %1。

  15、GOTO
  將 cmd.exe 導向到批處理程式中帶標籤的行。

  GOTO label

  label  指定批處理程式中用作標籤的文字字串。

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

  如果命令副檔名被啟用,GOTO 會如下改變:

  GOTO 命令現在接受目標標籤 :EOF,這個標籤將控制轉移到當前批指令碼檔案的結尾。不定義就退出批指令碼檔案,這是一個容易的辦法。有關能使該功能有用的 CALL 命令的副檔名描述,請參考CALL的介紹

  16、START (同時包括對外部命令呼叫所做的更改)
  啟動另一個視窗執行指定的程式或命令。

  START ["title"] [/Dpath] [/MIN] [/MAX] [/SEPARATE | /SHARED]
   [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
   [/WAIT] [command/program]
   [parameters]

  "title"  在視窗標題欄中顯示的標題。
  path    起始目錄
  B     在不建立新視窗的情況下開始應用程式。 除非啟動 ^C 處理,否則該應用程式會忽略 ^C 處理;^Break 是唯一可以中斷該應用程式的方式
  I     新環境是傳遞給 cmd.exe 的原始環境,而不是當前環境
  MIN    開始時視窗最小化
  MAX    開始時視窗最大化
  SEPARATE  在分開的空間內開始 16 位 Windows 程式
  SHARED   在分共享的空間內開始 16 位 Windows 程式
  LOW     在 IDLE 優先順序類別開始應用程式
  NORMAL   在 NORMAL 優先順序類別開始應用程式
  HIGH    在 HIGH 優先順序類別開始應用程式
  REALTIME  在 REALTIME 優先順序類別開始應用程式
  ABOVENORMAL 在 ABOVENORMAL 優先順序類別開始應用程式
  BELOWNORMAL 在 BELOWNORMAL 優先順序類別開始應用程式
  WAIT    啟動應用程式並等候它結束
  command/program 如果是內部 cmd 命令或批檔案,那麼該命令處理器是用 /K 命令列開關執行 cmd.exe 的。這表示該視窗在命令執行後仍然存在。

  如果不是內部 cmd 命令或批檔案,則是一個程式,並作為視窗應用程式或控制檯應用程式執行。

  parameters 這些為傳送到命令/程式的引數如果命令副檔名被啟用,透過命令列或 START 命令的外部命令呼叫會如下改變:

  將檔名作為命令鍵入,非可執行檔案 可以透過檔案關聯呼叫。
  (例如, WORD.DOC 會呼叫跟 .DOC 副檔名關聯的應用程式)。
  關於如何從命令指令碼內部建立這些關聯,請參閱 ASSOC 和FTYPE 命令。

  執行的應用程式是 32-位 GUI 應用程式時,CMD.EXE 不等應用程式終止就返回命令提示。如果在命令指令碼內執行,該新行為則不會發生。

  如果執行的命令列的第一個符號是不帶副檔名或路徑修飾符的字串 "CMD","CMD" 會被COMSPEC 變數的數值所替換。這防止從當前目錄抓出 CMD.EXE。

  如果執行的命令列的第一個符號沒有副檔名,CMD.EXE 會使用PATHEXT 環境變數的數值來決定要以什麼順序尋找哪些副檔名。PATHEXT 變數的預設值是:

    .COM;.EXE;.BAT;.CMD

  請注意,該語法跟 PATH 變數的一樣,分號隔開不同的元素。

  查詢可執行檔案時,如果沒有相配的副檔名,看一看該名稱是否與目錄名相配。如果確實如此,START 會在那個路徑上呼叫EXPlorer。如果從命令列執行,則等同於對那個路徑作 CD /D。


  17、ASSOC
  顯示或修改副檔名關聯ASSOC [.ext[=[fileType]]]
  .ext   指定跟檔案型別關聯的副檔名
  fileType 指定跟副檔名關聯的檔案型別
  鍵入 ASSOC 而不帶引數,顯示當前檔案關聯。如果只用副檔名呼叫 ASSOC,則顯示那個副檔名的當前檔案關聯。如果不為檔案型別指定任何引數,命令會刪除副檔名的關聯。

  18、FTYPE
  顯示或修改用在副檔名關聯中的檔案型別FTYPE [fileType[=[openCommandString]]]
  fileType 指定要檢查或改變的檔案型別
  openCommandString 指定呼叫這類檔案時要使用的開放式命令。
  鍵入 FTYPE 而不帶引數來顯示當前有定義的開放式命令字串的檔案型別。 FTYPE 僅用一個檔案型別啟用時,它顯示那個檔案型別目前的開放式命令字串。如果不為開放式命令字串指定,FTYPE 命令將刪除那個檔案型別的開放式命令字串。在一個開放式命令字串之內,命令字串 %0 或 %1 被透過關聯呼叫的檔名所代替。%* 得到所有的引數,%2 得到第一個引數,%3 得到第二個,等等。%~n 得到其餘所有以 nth 引數打頭的引數;n 可以是從 2 到 9 的數字。例如:
  ASSOC .pl=PerlScript
  FTYPE PerlScript=perl.exe %1 %*
  允許您啟用以下 Perl 指令碼:
  script.pl 1 2 3
  如果不想鍵入副檔名,則鍵入以下字串:
  set PATHEXT=.pl;%PATHEXT%
  被啟動的指令碼如下:
  script 1 2 3

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/802415/viewspace-862738/,如需轉載,請註明出處,否則將追究法律責任。

相關文章