windows CMD命令大全及詳細解釋和語法

批處理介紹

  • 純以dos系統而言,可執行程序大約可以細分爲五類,依照執行優先級由高到低排列分別是:
    1. DOSKEY宏命令(預先駐留內存)
    2. COMMAND.COM中的內部命令(根據內存的環境隨時進駐內存)
    3. 以com爲擴展名的可執行程序(由command.com 直接載入內存)
    4. 以exe位擴展名的可執行程序(由command.com 重定位後載入內存)
    5. 以bat位擴展名的批處理程序(由command.com 解釋分析,根據其內容按優先級順序調用第2,3,4,5種可執行程序,分析一行,執行一行,文件本身不載入內存)

特殊標記符

CR(0D) 命令行結束符
Escape(1B) ANSI轉義字符引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
"" 字符串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數開關引導符
: 批處理標籤引導符
% 批處理變量引導符 
  • ::確實可以起到rem 的註釋作用, 而且更簡潔有效; 但有兩點需要注意:
    1. 除了 :: 之外, 任何以:開頭的字符行, 在批處理中都被視作標號, 而直接忽略其後的所有內容, 只是爲了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在:後緊跟一個非字母數字的一個特殊符號。
    2. rem不同的是, ::後的字符行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因爲命令解釋器不認爲他是一個有效的命令行, 就此點來看, rem 在某些場合下將比:: 更爲適用。另外,rem 可以用於 config.sys 文件中。

批處理的參數

批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符%

%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量可以從%0%9%0表示批處理命令本身,其它參數字符串用%1%9順序表示。

例2:C:根目錄下有一批處理文件名爲f.bat,內容爲:

@echo off
format %1

如果執行C:\>f a:,那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令運行時實際執行的是format a:

例3:C:根目錄下一批處理文件名爲t.bat,內容爲:

@echo off
type %1
type %2

那麼運行C:\>t a.txt b.txt

%1 : 表示a.txt

%2 : 表示b.txt

於是上面的命令將順序地顯示a.txt和b.txt文件的內容。

參數在批處理中也作爲變量處理, 所以同樣使用百分號作爲引導符, 其後跟0-9中的一個數字構成參數引用符。引用符和參數之間 (例如上文中的 %1 與 a: ) 的關係類似於變量指針與變量值的關係。

當我們要引用第十一個或更多個參數時, 就必須移動DOS的參數起始指針。shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作。圖示如下:

初始狀態, cmd 爲命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

經過1次shift後, cmd 將無法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

經過2次shift後, arg1也被廢棄, %9指向爲空, 沒有引用意義
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8

遺憾的是, win9x 和DOS下均不支持 shift 的逆操作。只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數爲基準返復移動起始指針。

特殊命令

ifgotochoicefor是批處理文件中比較高級的命令,如果這幾個你用得很熟練,你就是批處理文件的專家啦。

IF語句

if 是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
  • if [not] "參數" == "字符串" 待執行的命令

參數如果等於(not表示不等,下同)指定的字符串,則條件成立,運行命令,否則運行下一句。

例:if "%1"=="a" format a:

if 的命令行幫助中關於此點的描述爲: IF [NOT] string1==string2 command

在此有以下幾點需要注意:

  1. 包含字符串的雙引號不是語法所必須的, 而只是習慣上使用的一種"防空"字符
  2. string1 未必是參數, 它也可以是環境變量, 循環變量以及其他字符串常量或變量
  3. command 不是語法所必須的, string2 後跟一個空格就可以構成一個有效的命令行
  • if [not] exist [路徑\]文件名 待執行的命令

如果有指定的文件,則條件成立,運行命令,否則運行下一句。

如: if exist c:\config.sys type c:\config.sys

表示如果存在c:\config.sys文件,則顯示它的內容。

也可以使用以下的用法:

if exist command

device 是指DOS系統中已加載的設備, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$

具體的內容會因硬軟件環境的不同而略有差異, 使用這些設備名稱時, 需要保證以下三點:

  1. 該設備確實存在(由軟件虛擬的設備除外)
  2. 該設備驅動程序已加載(aux, prn等標準設備由系統缺省定義)
  3. 該設備已準備好(主要是指a: b: ..., com1..., lpt1...等)

可通過命令 mem/d | find "device" /i 來檢閱你的系統中所加載的設備

另外, 在DOS系統中, 設備也被認爲是一種特殊的文件, 而文件也可以稱作字符設備; 因爲設備(device)與文件都是使用句柄(handle)來管理的, 句柄就是名字, 類似於文件名, 只不過句柄不是應用於磁盤管理, 而是應用於內存管理而已, 所謂設備加載也即指在內存中爲其分配可引用的句柄.

  • if errorlevel <數字> 待執行的命令

很多DOS程序在運行結束後會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。

如:if errorlevel 2 goto x2

返回值從大到小的順序排列不是必須的, 而只是執行命令爲 goto 時的習慣用法, 當使用 set 作爲執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變量, 就需使用以下的順序形式:

if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...

當然, 也可以使用以下循環來替代, 原理是一致的: for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e

更高效簡潔的用法, 可以參考我寫的另一篇關於獲取 errorlevel 的文章。

出現此種現象的原因是, if errorlevel比較返回碼的判斷條件並非等於, 而是 大於等於(>=) 。由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重複" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼。

另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作爲命令行切分符而忽略掉罷了。

GOTO語句

goto 批處理文件運行到這裏將跳到goto所指定的標號(標號即label,標號用:後跟標準字符串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。

如:

goto end

:end
echo this is the end

標號用 :字符串 來定義,標號所在行不被執行。

label 常被譯爲 "標籤" , 但是這並不具有廣泛的約定性。

goto 與 : 聯用可實現執行中途的跳轉, 再結合 if 可實現執行過程的條件分支, 多個 if 即可實現命令的分組, 類似 C 中 switch case 結構或者 Basic 中的 select case 結構, 大規模且結構化的命令分組即可實現高級語言中的函數功能。

choice語句

choice 使用此命令可以讓用戶輸入一個字符(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。

注意:choice命令爲DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。

choice的命令語法(該語法爲Windows 2003中choice命令的語法,其它版本的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,等等。如果用戶按的鍵不是有效的選擇,
該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會返回 0
的 ERRORLEVEL 值。在一個批程序中使用 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。"

例:test.bat的內容如下(**注意,用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語句根據用戶的選擇作出判斷,d表示執行標號爲defrag的程序段,m表示執行標號爲mem的程序段,e表示執行標號爲end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,批處理運行結束。

for循環

for 循環命令,只要條件符合,它將多次執行同一命令。

語法:對一組文件中的每一個文件執行某個特定命令。

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

(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters 爲特定命令指定參數或命令行開關。

例如一個批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c

則該命令行會顯示當前目錄下所有以bat和txt爲擴展名的文件的內容。

需要指出的是, 當()中的字符串並非單個或多個文件名時, 它將單純被當作字符串替換, 這個特性再加上()中可以嵌入多個字符串的特性, 很明顯 for 可以被看作一種遍歷型循環。

當然, 在 nt/2000/xp/2003 系列的命令行環境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字符串, 也有很多開關被用於擴展了文件替換功能。

批處理示例

IF-EXIST

  • 首先用記事本在C:\建立一個test1.bat批處理文件,文件內容如下:
    @echo off
    IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
    IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
    

然後運行它:C:\>TEST1.BAT

如果C:\存在AUTOEXEC.BAT文件,那麼它的內容就會被顯示出來,如果不存在,批處理就會提示你該文件不存在。

  • 接着再建立一個test2.bat文件,內容如下:
    @ECHO OFF
    IF EXIST \%1 TYPE \%1
    IF NOT EXIST \%1 ECHO \%1 does not exist
    

執行:C:\>TEST2 AUTOEXEC.BAT,該命令運行結果同上。

說明:

(1) IF EXIST 是用來測試文件是否存在的,格式爲IF EXIST [路徑+文件名] 命令

(2) test2.bat文件中的%1是參數,DOS允許傳遞9個批參數信息給批處理文件,分別爲%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關係,%1是形參,AUTOEXEC.BAT是實參。

DOS沒有 "只允許傳遞9個批參數信息" 的限制, 參數的個數只會受到命令行長度和所調用命令處理能力的限制. 但是, 我們在批處理程序中, 在同一時刻只能同時引用10個參數, 因爲 DOS只給出了 %0~%9這十個參數引用符。

  • 更進一步的,建立一個名爲TEST3.BAT的文件,內容如下:
    @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

在這個命令執行過程中,DOS會將一個空字符串指定給參數%3。

IF-ERRORLEVEL

建立TEST4.BAT,內容如下:

@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件

然後執行文件: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 預置錯誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤 

無論拷貝是否成功,後面的:

未找到拷貝文件
用戶通過ctrl-c中止拷貝操作
預置錯誤阻止文件拷貝操作
拷貝過程中寫盤錯誤

都將顯示出來。 
  • 常用命令返回值
    以下就是幾個常用命令的返回值及其代表的意義:
    
    backup
    0 備份成功
    1 未找到備份文件
    2 文件共享衝突阻止備份完成
    3 用戶用ctrl-c中止備份
    4 由於致命的錯誤使備份操作中止
    
    diskcomp
    0 盤比較相同
    1 盤比較不同
    2 用戶通過ctrl-c中止比較操作
    3 由於致命的錯誤使比較操作中止
    4 預置錯誤中止比較
    
    diskcopy
    0 盤拷貝操作成功
    1 非致命盤讀/寫錯
    2 用戶通過ctrl-c結束拷貝操作
    3 因致命的處理錯誤使盤拷貝中止
    4 預置錯誤阻止拷貝操作
    
    format
    0 格式化成功
    3 用戶通過ctrl-c中止格式化處理
    4 因致命的處理錯誤使格式化中止
    5 在提示"proceed with format(y/n)?"下用戶鍵入n結束
    
    xcopy
    0 成功拷貝文件
    1 未找到拷貝文件
    2 用戶通過ctrl-c中止拷貝操作
    4 預置錯誤阻止文件拷貝操作
    5 拷貝過程中寫盤錯誤
    
    chkdsk
    0 未找到錯誤
    255 找到一個或多個錯誤
    
    choice
    0 用戶按下ctrl+c/break
    1 用戶按下第一個鍵
    255 檢測到命令行中的錯誤條件
    其它 用戶按下的有效字符在列表中的位置
    
    defrag
    0 碎片壓縮成功
    1 出現內部錯誤
    2 磁盤上沒有空簇。要運行DEFRAG,至少要有一個空簇
    3 用戶用Ctrl+C退出了DEFRAG
    4 出現一般性錯誤
    5 DEFRAG在讀簇時遇到錯誤
    6 DEFRAG在寫簇時遇到錯誤
    7 分配空間有錯
    8 內存錯
    9 沒有足夠空間來壓縮磁盤碎片
    
    deltree
    0 成功地刪除一個目錄
    
    diskcomp
    0 兩盤相同
    1 發現不同
    2 按CTRL+C 終止了比較
    3 出現嚴重錯誤
    4 出現初始化錯誤
    
    find
    0 查找成功且至少找到了一個匹配的字符串
    1 查找成功但沒找到匹配的字符串
    2 查找中出現了錯誤
    
    keyb
    0 鍵盤定義文件裝入成功
    1 使用了非法的鍵盤代碼,字符集或語法
    2 鍵盤定義文件壞或未找到
    4 鍵盤、監視器通訊時出錯
    5 要求的字符集未準備好
    
    move
    0 成功地移動了指定的文件
    1 發生了錯誤
    
    msav /N
    86 檢查到了病毒
    
    replace
    0 REPLACE成功地替換或加入了文件
    1 MS-DOS版本和REPLACE不兼容
    2 REPLACE找不到源文件
    3 REPLACE找不到源路徑或目標路徑
    5 不能存取要替換的文件
    8 內存不夠無法執行REPLACE
    11 命令行句法錯誤
    
    restore
    0 RESTORE成功地恢復了文件
    1 RESTORE找不到要恢復的文件
    3 用戶按CTRL+C終止恢復過程
    4 RESTORE因錯誤而終止
    
    scandisk
    0 ScanDisk在它檢查的驅動器上未檢測到任何錯誤
    1 由於命令行的語法不對,不能運行ScanDisk
    2 由於內存用盡或發生內部錯誤,ScanDisk意外終止
    3 用戶讓ScanDisk中途退出
    4 進行盤面掃描時,用戶決定提前退出
    254 ScanDisk找到磁盤故障並已全部校正
    255 ScanDisk找到磁盤故障,但未能全部校正
    
    setver
    0 SETVER成功地完成了任務
    1 用戶指定了一個無效的命令開關
    2 用戶指定了一個非法的文件名
    3 沒有足夠的系統內存來運行命令
    4 用戶指定了一個非法的版本號格式
    5 SETVER在版本表中未找到指定的項
    6 SETVER未找到SETVER.EXE文件
    7 用戶指定了一個非法的驅動器
    8 用戶指定了太多的命令行參數
    9 SETVER檢測到丟失了命令行參數
    10 在讀SETVER.EXE文件時,SETVER檢測到發生錯誤
    11 SETVER.EXE文件損壞
    12 指定的SETVER.EXE文件不支持版本表
    13 版本表中沒有足夠的空間存放新的項
    14 在寫SETVER.EXE文件時SETVER檢測到發生錯誤 
    

IF STRING1 == STRING2

建立TEST5.BAT,文件內容如下:

@echo off
IF "%1" == "A" FORMAT A:

執行:C:\>TEST5 A,屏幕上就出現是否將A:盤格式化的內容。

注意:爲了防止參數爲空的情況,一般會將字符串用雙引號(或者其它符號,注意不能使用保留符號)括起來。

如:if [%1]==[A] 或者 if %1*==A*

GOTO

建立TEST6.BAT,文件內容如下:

@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE
  • 注意:
    1. 標號前是ASCII字符的冒號":",冒號與標號之間不能有空格。
    2. 標號的命名規則與文件名的命名規則相同(籤不能以大多數的非字母數字字符開始, 而文件名中則可以使用很多)。
    3. DOS支持最長八位字符的標號,當無法區別兩個標籤時, 將跳轉至位置最靠前的標籤。

FOR

建立C:\TEST7.BAT,文件內容如下:

@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C

運行:C:\>TEST7

執行以後,屏幕上會將C:盤根目錄下所有以BAT、TXT、SYS爲擴展名的文件內容顯示出來(不包括隱藏文件)。

建立test.cmd

@ECHO OFF
FOR %%C IN (%*) DO @ECHO %%C

ECHO ---------------
FOR %%C IN (%*) DO (FOR /L %%I IN (1,1,2) DO echo %%C%%I)

ECHO ---------------
FOR %%C IN (%*) DO (
   FOR /L %%I IN (3,1,4) DO echo %%C-%%I
      )

運行:test.cmd a b,輸入內容如下:

a
b
---------------
a1
a2
b1
b2
---------------
a-3
a-4
b-3
b-4

命令列表

  • 版本:Microsoft Windows XP [版本 5.1.2600]
  • 有關某個命令的詳細信息,請鍵入:HELP 命令名查看。
  • 命令列表
    ASSOC    顯示或修改文件擴展名關聯。
    AT       計劃在計算機上運行的命令和程序。
    ATTRIB   顯示或更改文件屬性。
    BREAK    設置或清除擴展式 CTRL+C 檢查。
    CACLS    顯示或修改文件的訪問控制列表(ACLs)。
    CALL     從另一個批處理程序調用這一個。
    CD       顯示當前目錄的名稱或將其更改。
    CHCP     顯示或設置活動代碼頁數。
    CHDIR    顯示當前目錄的名稱或將其更改。
    CHKDSK   檢查磁盤並顯示狀態報告。
    CHKNTFS  顯示或修改啓動時間磁盤檢查。
    CLS      清除屏幕。
    CMD      打開另一個 Windows 命令解釋程序窗口。
    COLOR    設置默認控制檯前景和背景顏色。
    COMP     比較兩個或兩套文件的內容。
    COMPACT  顯示或更改 NTFS 分區上文件的壓縮。
    CONVERT  將 FAT 卷轉換成 NTFS。您不能轉換當前驅動器。
    COPY     將至少一個文件複製到另一個位置。
    DATE     顯示或設置日期。
    DEL      刪除至少一個文件。
    DIR      顯示一個目錄中的文件和子目錄。
    DISKCOMP 比較兩個軟盤的內容。
    DISKCOPY 將一個軟盤的內容複製到另一個軟盤。
    DOSKEY   編輯命令行、調用 Windows 命令並創建宏。
    ECHO     顯示消息,或將命令回顯打開或關上。
    ENDLOCAL 結束批文件中環境更改的本地化。
    ERASE    刪除至少一個文件。
    EXIT     退出 CMD.EXE 程序(命令解釋程序)。
    FC       比較兩個或兩套文件,並顯示不同處。
    FIND     在文件中搜索文字字符串。
    FINDSTR  在文件中搜索字符串。
    FOR      爲一套文件中的每個文件運行一個指定的命令。
    FORMAT   格式化磁盤,以便跟 Windows 使用。
    FTYPE    顯示或修改用於文件擴展名關聯的文件類型。
    GOTO     將 Windows 命令解釋程序指向批處理程序中某個標明的行。
    GRAFTABL 啓用 Windows 來以圖像模式顯示擴展字符集。
    HELP     提供 Windows 命令的幫助信息。
    IF       執行批處理程序中的條件性處理。
    LABEL    創建、更改或刪除磁盤的卷標。
    MD       創建目錄。
    MKDIR    創建目錄。
    MODE     配置系統設備。
    MORE     一次顯示一個結果屏幕。
    MOVE     將文件從一個目錄移到另一個目錄。
    PATH     顯示或設置可執行文件的搜索路徑。
    PAUSE    暫停批文件的處理並顯示消息。
    POPD     還原 PUSHD 保存的當前目錄的上一個值。
    PRINT    打印文本文件。
    PROMPT   更改 Windows 命令提示符。
    PUSHD    保存當前目錄,然後對其進行更改。
    RD       刪除目錄。
    RECOVER  從有問題的磁盤恢復可讀信息。
    REM      記錄批文件或 CONFIG.SYS 中的註釋。
    REN      重命名文件。
    RENAME   重命名文件。
    REPLACE  替換文件。
    RMDIR    刪除目錄。
    SET      顯示、設置或刪除 Windows 環境變量。
    SETLOCAL 開始批文件中環境更改的本地化。
    SHIFT    更換批文件中可替換參數的位置。
    SORT     對輸入進行分類。
    START    啓動另一個窗口來運行指定的程序或命令。
    SUBST    將路徑跟一個驅動器號關聯。
    TIME     顯示或設置系統時間。
    TITLE    設置 CMD.EXE 會話的窗口標題。
    TREE     以圖形模式顯示驅動器或路徑的目錄結構。
    TYPE     顯示文本文件的內容。
    VER      顯示 Windows 版本。
    VERIFY   告訴 Windows 是否驗證文件是否已正確寫入磁盤。
    VOL      顯示磁盤卷標和序列號。
    XCOPY    複製文件和目錄樹。
    

CALL

從批處理程序調用另一個批處理程序。

如果不用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 可以被其他有效數值替換。
    %~ 語法被一個有效參數號碼終止。%~ 修定符不能跟 %*使用

CMD

啓動 Windows XP 命令解釋程序一個新的實例

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      關閉迴應
/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_MACHINE\Software\Microsoft\Command Processor\AutoRun

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

命令擴展是按默認值啓用的。您也可以使用 /E:OFF,爲某一特定調用而停用擴展。您可以在機器上和/或用戶登錄會話上啓用或停用 CMD.EXE 所有調用的擴展,這要通過設置使用 REGEDT32.EXE 的註冊表中的一個或兩個 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

到 0x1 或 0x0。用戶特定設置比機器設置有優先權。命令行開關比註冊表設置有優先權。

命令行擴展包括對下列命令所做的更改和/或添加:

    DEL 或 ERASE
    COLOR
    CD 或 CHDIR
    MD 或 MKDIR
    PROMPT
    PUSHD
    POPD
    SET
    SETLOCAL
    ENDLOCAL
    IF
    FOR
    CALL
    SHIFT
    GOTO
    START (同時包括對外部命令調用所做的更改)
    ASSOC
    FTYPE

有關詳細信息,請鍵入 HELP 命令名。

延遲變量環境擴展不按默認值啓用。您可以用/V:ON 或 /V:OFF 命令行開關,爲 CMD.EXE 的某個調用而啓用或停用延遲環境變量擴充。
您可以在機器上和/或用戶登錄會話上啓用或停用 CMD.EXE 所有調用的完成,這要通過設置使用 REGEDT32.EXE 的註冊表中的一個或兩個 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

到 0x1 或 0x0。用戶特定設置比機器設置有優先權。命令行開關比註冊表設置有優先權。

如果延遲環境變量擴充被啓用,驚歎號字符可在執行時間,被用來代替一個環境變量的數值。

文件和目錄名完成不按默認值啓用。您可以用 /F:ON 或 /F:OFF 命令行開關,爲 CMD.EXE 的某個調用而啓用或停用文件名完成。 您可以在機器上和/或用戶登錄會話上啓用或停用 CMD.EXE 所有調用的完成,這要通過設置使用 REGEDT32.EXE 的註冊表中的一個或兩個 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

        和/或

    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),就會使用目錄完成。

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

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

EXIT

退出 CMD.EXE 程序(命令翻譯程序)或當前批處理腳本。

EXIT [/B] [exitCode]

  /B          指定要退出當前批處理腳本而不是 CMD.EXE。如果從一個批處理腳本外執行,則會退出 CMD.EXE
  exitCode    指定一個數字號碼。如果指定了 /B,將 ERRORLEVEL設成那個數字。如果退出 CMD.EXE,則用那個數字設置過程退出代碼。

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 的大寫變量名比較易讀,而且避免與不分大小寫的組合鍵混淆。

GOTO

將 cmd.exe 導向到批處理程序中帶標籤的行。

GOTO label

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

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

如果命令擴展名被啓用,GOTO 會如下改變:

GOTO 命令現在接受目標標籤 :EOF,這個標籤將控制轉移到當前批腳本文件的結尾。不定義就退出批腳本文件,這是一個容易的辦法。有關能使該功能有用的 CALL 命令的擴展名描述,請鍵入CALL /?。

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 [/I] 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 當前數值的字串符表達式;否則,您會得到其數值。

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 命令行開關而被啓用/停用。
請參閱 CMD /?

考慮到讀取一行文本時所遇到的目前擴充的限制時,延遲環境變量擴充是很有用的,而不是執行的時候。以下例子說明直接變量擴充的問題:

    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% - 擴展到調用命令處理器的原始命令行。

SHIFT

更改批處理文件中可替換參數的位置。

SHIFT [/n]

如果命令擴展名被啓用,SHIFT 命令支持/n 命令行開關;該命令行開關告訴命令從第 n 個參數開始移位;n 介於零和八之間。例如:
    SHIFT /2
會將 %3 移位到 %2,將 %4 移位到 %3,等等;並且不影響 %0 和 %1。

其它

  • BREAK

設置或清除 DOS 系統的擴展 CTRL+C 檢測

這個命令是爲了與 DOS 系統的兼容而保留的,在 Windows XP 裏不起作用。

如果命令擴展名被啓用,並且操作平臺是 Windows XP,BREAK 命令會在被調試程序調試時輸入一個硬代碼中斷點。

  • CACLS

顯示或者修改文件的訪問控制表(ACL)

注意: 不推薦使用 Cacls,請使用 Icacls。

顯示或者修改文件的訪問控制列表(ACL)

 CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]
        [/R user [...]] [/P user:perm [...]] [/D user [...]]
    filename      顯示 ACL。
    /T            更改當前目錄及其所有子目錄中
                  指定文件的 ACL。
    /L            對照目標處理符號鏈接本身
    /M            更改裝載到目錄的卷的 ACL
    /S            顯示 DACL 的 SDDL 字符串。
    /S:SDDL       使用在 SDDL 字符串中指定的 ACL 替換 ACL。
                  (/E、/G、/R、/P 或 /D 無效)。
    /E            編輯 ACL 而不替換。
    /C            在出現拒絕訪問錯誤時繼續。
    /G user:perm  賦予指定用戶訪問權限。
                  Perm 可以是: R  讀取
                               W  寫入
                               C  更改(寫入)
                               F  完全控制
    /R user       撤銷指定用戶的訪問權限(僅在與 /E 一起使用時合法)。
    /P user:perm  替換指定用戶的訪問權限。
                  Perm 可以是: N  無
                               R  讀取
                               W  寫入
                               C  更改(寫入)
                               F  完全控制
    /D user       拒絕指定用戶的訪問。
 在命令中可以使用通配符指定多個文件。
 也可以在命令中指定多個用戶。

縮寫:
    CI - 容器繼承。
         ACE 會由目錄繼承。
    OI - 對象繼承。
         ACE 會由文件繼承。
    IO - 只繼承。
         ACE 不適用於當前文件/目錄。
    ID - 已繼承。
         ACE 從父目錄的 ACL 繼承。
  • ASSOC

顯示或修改文件擴展名關聯

ASSOC [.ext[=[fileType]]]

  .ext      指定跟文件類型關聯的文件擴展名
  fileType  指定跟文件擴展名關聯的文件類型

鍵入 ASSOC 而不帶參數,顯示當前文件關聯。如果只用文件擴展名調用 ASSOC,則顯示那個文件擴展名的當前文件關聯。如果不爲文件類型指定任何參數,命令會刪除文件擴展名的關聯。

  • AT

命令安排在特定日期和時間運行命令和程序。 要使用 AT 命令,計劃服務必須已在運行中。

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]                   
AT [\\computername] time [/INTERACTIVE] [ /EVERY:date[,...] | /NEXT:date[,...]] "command"

\\computername       指定遠程計算機。 如果省略這個參數,會計劃在本地計算機上運行命令。            
id                   指定給已計劃命令的識別號。
/delete              刪除某個已計劃的命令。如果省略 id,計算機上所有已計劃的命令都會被刪除。
/yes                 不需要進一步確認時,跟刪除所有作業的命令一起使用。
time                 指定運行命令的時間。
/interactive         允許作業在運行時,與當時登錄的用戶桌面進行交互。
/every:date[,...]    每個月或每個星期在指定的日期運行命令。如果省略日期,則默認爲在每月的本日運行。
/next:date[,...]     指定在下一個指定日期(如,下週四)運行命令。如果省略日期,則默認爲在每月的本日運行。
"command"            準備運行的 Windows NT 命令或批處理程序。
  • ATTRIB

顯示或更改文件屬性。

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]

  +   設置屬性。
  -    清除屬性。
  R   只讀文件屬性。
  A   存檔文件屬性。
  S   系統文件屬性。
  H   隱藏文件屬性。
  [drive:][path][filename]
      指定要處理的文件屬性。
  /S  處理當前文件夾及其子文件夾中的匹配文件。
  /D  也處理文件夾。
  • CD/CHDIR

顯示當前目錄名或改變當前目錄。

CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]
..   指定要改成父目錄。
鍵入 CD 驅動器: 顯示指定驅動器中的當前目錄。
不帶參數只鍵入 CD,則顯示當前驅動器和目錄。
使用 /D 命令行開關,除了改變驅動器的當前目錄之外,還可改變當前驅動器。
如果擴展命令名被啓用,CHDIR 會如下改變:
當前的目錄字符串會被轉換成使用磁盤名上的大小寫。所以,如果磁盤上的大小寫如此,CD  C : \TEMP 會將當前目錄設爲 C:\Temp。
CHDIR 命令不把空格當作分隔符,因此有可能將目錄名改爲一個帶有空格但不帶有引號的子目錄名。例如:
     cd \winnt\profiles\username\programs\start menu
與下列相同: 
     cd "\winnt\profiles\username\programs\start menu"
在擴展功能停用的情況下,您必須鍵入以上命令。
  • CHKDSK

檢查磁盤並顯示狀態報告。

CHKDSK [volume[[path]filename]]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:size]]

  volume          指定驅動器(後面跟一個冒號)、裝入點或卷名。
  filename        僅用於 FAT/FAT32: 指定要檢查是否有碎片的文件。
  /F              修復磁盤上的錯誤。
  /V              在 FAT/FAT32 上: 顯示磁盤上每個文件的完整路徑和名稱。在 NTFS 上: 如果有清除消息,將其顯示。
  /R              查找不正確的扇區並恢復可讀信息(隱含 /F)。
  /L:size       僅用於 NTFS:  將日誌文件大小改成指定的 KB 數。如果沒有指定大小,則顯示當前的大小。
  /X              如果必要,強制卷先卸下。卷的所有打開的句柄就會無效(隱含 /F)。
  /I              僅用於 NTFS: 對索引項進行強度較小的檢查。
  /C              僅用於 NTFS: 跳過文件夾結構的循環檢查。

/I 和 /C 命令行開關跳過卷的某些檢查,減少運行 Chkdsk 所需的時間。
  • CHKNTFS

在啓動時顯示或修改磁盤檢查。

CHKNTFS volume [...]
CHKNTFS /D
CHKNTFS /T[:time]\r\nCHKNTFS /X volume [...]
CHKNTFS /C volume [...]

  volume:        指定驅動器(後面跟一個冒號)、裝入點或卷名。
  /D             將計算機恢復成默認狀態, 啓動時檢查所有驅動器,並對有問題的驅動器執行 chkdsk 命令。
  /T:time        將 AUTOCHK 初始遞減計數時間改成指定的時間量,單位爲秒數。如果沒有指定時間,則顯示當前設置。
  /X             排除啓動時不作檢查的驅動器。上次執行此命令排除的驅動器此時無效。
  /C             安排啓動時檢查驅動器,如果驅動器有問題,運行 chkdsk。

如果沒有指定命令行開關,CHKNTFS 會顯示每一驅動器有問題的位的狀態。
  • COMPACT

顯示或改變 NTFS 分區上文件的壓縮。

COMPACT [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [filename [...]]

  /C        壓縮指定的文件。會給目錄作標記,這樣以後添加的文件會得到壓縮。
  /U        解壓縮指定的文件。會給目錄作標記,這樣以後添加的文件不會得到壓縮。
  /S        在指定的目錄和所有子目錄中的文件上執行指定操作。默認 "dir"是當前目錄。
  /A        顯示具有隱藏或系統屬性的文件。在默認情況下,這些文件都是被忽略的。
  /I        即使在錯誤發生後,依然繼續執行指定的操作。在默認情況下,COMPACT 在遇到錯誤時會停止。
  /F        在所有指定文件上強制壓縮操作,包括已被壓縮的文件。在默認情況下,已經壓縮的文件被忽略。
  /Q        只報告最重要的信息。
  filename  指定類型、文件和目錄。

  不跟參數一起使用時,COMPACT 顯示當前目錄及其所含文件的壓縮狀態。您可以使用多個文件名和通配符。在多個參數之間必須加空格。
  • CONVERT

將 FAT 卷轉換成 NTFS。

CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]

  volume      指定驅動器號(後面跟一個冒號)、裝載點或卷名。
  /FS:NTFS    指定要被轉換成 NTFS 的卷。
  /V          指定 Convert 應該用詳述模式運行。
  /CvtArea:filename
              將根目錄中的一個接續文件指定爲 NTFS 系統文件的佔位符。
  /NoSecurity 指定每個人都可以訪問轉換的文件和目錄的安全設置。
  /X          如果必要,先強行卸載卷。該卷的所有打開的句柄則無效。
  • FORMAT

格式化磁盤以供 Windows XP 使用。

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

  volume           指定驅動器(後面跟一個冒號)、裝入點或卷名。
  /FS:filesystem  指定文件系統類型(FAT、FAT32 或 NTFS)。
  /V:label        指定卷標。
  /Q              執行快速格式化。
  /C              僅適於 NTFS: 默認情況下,將壓縮在該新建捲上創建的文件。
   /X              如果必要,先強制卸下卷。那時,該卷所有已打開的句柄不再有效。
  /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 字節的扇區)。
                       
                  注意 FAT 及 FAT32 文件系統對捲上的羣集數量有以下限制:

                  FAT: 羣集數量 <= 65526
                  FAT32: 65526 < 羣集數量 < 4177918

                  如果判定使用指定的羣集大小無法滿足以上需求,格式化將立即停止。

                  NTFS 壓縮不支持大於 4096 的分配單元。

  /F:size         指定要格式化的軟盤大小(1.44)
  /T:tracks       爲磁盤指定每面磁道數。
  /N:sectors      指定每條磁道的扇區數。
  • MODE

配置系統設備。

串行口:      MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [to=on|off] [xon=on|off] [odsr=on|off] [octs=on|off] [dtr=on|off|hs] [rts=on|off|hs|tg] [idsr=on|off]
設備狀態:       MODE [device] [/STATUS]
打印重定向:   MODE LPTn[:]=COMm[:]
選定代碼頁:   MODE CON[:] CP SELECT=yyy
代碼頁狀態:   MODE CON[:] CP [/STATUS]
顯示模式:     MODE CON[:] [COLS=c] [LINES=n]
擊鍵率:        MODE CON[:] [RATE=r DELAY=d]
  • MORE

逐屏顯示輸出。

MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename
command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]
MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

    [drive:][path]filename  指定要逐屏顯示的文件。

    command-name            指定要顯示其輸出的命令 。

    /E      啓用擴展功能
    /C      顯示頁面前先清除屏幕
    /P      擴展 FormFeed 字符
    /S      將多個空白行縮成一行
    /Tn     將跳格鍵擴展成 n 個空格(默認值爲命令行開關可以出現在 MORE 環境變量中。

    +n      從第 n 行開始顯示第一個文件

    files    要顯示的文件列表。 用空格分開列表中的文件。

    如果擴展的功能已經啓用,在 -- More -- 提示處會接受下列命令:

    P n     顯示下 n 行
    S n     略過下 n 行
    F       顯示下個文件
    Q       退出
    =       顯示行號
    ?       顯示幫助行
    <space> 顯示下一頁
    <ret>   顯示下一行
  • RECOVER

從有問題的磁盤恢復可讀信息。

RECOVER [drive:][path]filename
在使用 RECOVER 命令以前,先查閱 Windows XP 幫助內的聯機命令參考。
  • RENAME

重命名文件。

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

請注意,您不能爲目標文件指定新的驅動器或路徑。
  • REPLACE

替換文件。

REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]
REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] [/U]

  [drive1:][path1]filename 指定源文件。
  [drive2:][path2]         指定要替換文件的目錄。
  /A                       把新文件加入目標目錄。不能和 /S 或 /U 命令行開關搭配使用。
  /P                       替換文件或加入源文件之前會先提示您進行確認。
  /R                       替換隻讀文件以及未受保護的文件。
  /S                       替換目標目錄中所有子目錄的文件。不能與 /A 命令選項搭配使用。
  /W                       等您插入磁盤以後再運行。
  /U                       只會替換或更新比源文件日期早的文件。
                           不能與 /A 命令行開關搭配使用。
  • MKDIR:創建目錄。
    MKDIR [drive:]path
    MD [drive:]path
    
    如果命令擴展名被啓用,MKDIR 會如下改變:
    如果需要,MKDIR 會在路徑中創建中級目錄。例如: 假設 \a 不存在,那麼:
        mkdir \a\b\c\d
    與:
        mkdir \a
        chdir \a
        mkdir b
        chdir b
        mkdir c
        chdir c
        mkdir d
    相同。如果擴展名被停用,則需要鍵入 mkdir \a\b\c\d。
    
  • RMDIR:刪除一個目錄。
    RMDIR [/S] [/Q] [drive:]path
    RD [/S] [/Q] [drive:]path
        /S      除目錄本身外,還將刪除指定目錄下的所有子目錄和文件。用於刪除目錄樹。
        /Q      安靜模式,帶 /S 刪除目錄樹時不要求確認從損壞的磁盤中恢復可讀取的信息。
    
  • 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
    
  • DOSKEY

編輯命令行,重調用 Windows XP 命令,並創建宏。

DOSKEY [/REINSTALL] [/LISTSIZE=size] [/MACROS[:ALL | :exename]] [/HISTORY] [/INSERT | /OVERSTRIKE] [/EXENAME=exename] [/MACROFILE=filename] [macroname=[text]]

  /REINSTALL          安裝一組新的 Doskey。
  /LISTSIZE=size      設置命令歷史記錄的緩衝區大小。
  /MACROS             顯示所有 Doskey 宏。
  /MACROS:ALL         爲具有 Doskey 宏的執行文件,顯示所有的 Doskey 宏。
  /MACROS:exename     顯示指定執行文件的所有 Doskey 宏。
  /HISTORY            顯示保存在內存中的所有命令。
  /INSERT             指定用鍵入的新文字插入舊文字中。
  /OVERSTRIKE         指定新文字改寫舊文字。
  /EXENAME=exename    指定執行文件。
  /MACROFILE=filename 指定安裝的宏文件。
  macroname           指定所創建宏的名稱。
  text                指定要登記的命令。

使用上下箭頭鍵選擇命令;ESC 清除命令行;F7 顯示命令歷史記錄;ALT+F7 清除命令歷史記錄;F8 搜索命令歷史記錄;F9 按編號選擇命令;ALT+F10 清除宏定義。

以下是 Doskey 宏定義的特殊碼:
$T     命令分隔符號。允許一個宏可以含多個命令。
$1-$9  批處理參數。與批處理程序中的 %1-%9 相同。
$*     以命令行中命令名稱後面的任何內容替換的符號。
  • COPY/MOVE
  • COPY:將一份或多份文件複製到另一個位置。
    COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B] [+ source [/A | /B] [+ ...]] [destination [/A | /B]]
    
      source       指定要複製的文件。
      /A           表示一個 ASCII 文本文件。
      /B           表示一個二進位文件。
      /D           允許解密要創建的目標文件
      destination  爲新文件指定目錄和/或文件名。
      /V           驗證新文件寫入是否正確。
      /N           複製帶有非 8dot3 名稱的文件時,儘可能使用短文件名。
      /Y           不使用確認是否要改寫現有目標文件的提示。
      /-Y          使用確認是否要改寫現有目標文件的提示。
      /Z           用可重新啓動模式複製已聯網的文件。
    
    命令行開關 /Y 可以在 COPYCMD 環境變量中預先設定。
    這可能會被命令行上的 /-Y 替代。除非 COPY 命令是在一個批文件腳本中執行的,默認值應爲在改寫時進行提示。
    
    要附加文件,請爲目標指定一個文件,爲源指定數個文件(用通配符或 file1+file2+file3 格式)。
    
  • MOVE:移動文件並重命名文件和目錄。
    要移動至少一個文件:
    MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination
    
    要重命名一個目錄:
    MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2
    
      [drive:][path]filename1 指定您想移動的文件位置和名稱。
      destination             指定文件的新位置。目標可包含一個驅動器號和冒號、一個目錄名或組合。如果只移動一個文件並在移動時將其重命名,您還可以包括文件名。
      [drive:][path]dirname1  指定要重命名的目錄。
      dirname2                指定目錄的新名稱。
    
      /Y                      取消確認改寫一個現有目標文件的提示。
      /-Y                     對確認改寫一個現有目標文件發出提示。
    
    命令行開關 /Y 可以出現在 COPYCMD 環境變量中。這可以用命令行上的 /-Y 替代。默認值是,除非 MOVE 命令是從一個批腳本內執行的,改寫時都發出提示。
    
  • DATE:顯示或設置日期。
    DATE  [/T | date]
    
    顯示當前日期設置和輸入新日期的提示,請鍵入不帶參數的 DATE。要保留現有日期,請按 ENTER。
    如果命令擴展名被啓用,DATE 命令會支持 /T 開關;該開關指示命令只輸出當前日期,但不提示輸出新日期。
    
    
  • TIME:顯示或設置系統時間。
    TIME [/T | time]
    
    顯示當前時間設置和輸入新時間的提示,請鍵入不帶參數的 TIME。要保留現有時間,請按 Enter。
    如果命令擴展被啓用,TIME 命令會支持 /T 命令行開關;該命令行開關告訴命令只輸出當前時間,但不提示輸入新時間。
    
  • 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 開關的顯示句法會顛倒,即只顯示已經刪除的文件,而不顯示找不到的文件。
    
  • DIR:顯示目錄中的文件和子目錄列表。
    DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] [/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
    
      [drive:][path][filename]
                  指定要列出的驅動器、目錄和/或文件。
    
      /A          顯示具有指定屬性的文件。
      attributes   D  目錄                R  只讀文件
                   H  隱藏文件            A  準備存檔的文件
                   S  系統文件            -  表示“否”的前綴
      /B          使用空格式(沒有標題信息或摘要)。
      /C          在文件大小中顯示千位數分隔符。這是默認值。用 /-C 來停用分隔符顯示。
      /D          跟寬式相同,但文件是按欄分類列出的。
      /L          用小寫。
      /N          新的長列表格式,其中文件名在最右邊。
      /O          用分類順序列出文件。
      sortorder    N  按名稱(字母順序)     S  按大小(從小到大)
                   E  按擴展名(字母順序)   D  按日期/時間(從先到後)
                   G  組目錄優先           -  顛倒順序的前綴
      /P          在每個信息屏幕後暫停。
      /Q          顯示文件所有者。
      /S          顯示指定目錄和所有子目錄中的文件。
      /T          控制顯示或用來分類的時間字符域。
      timefield   C  創建時間
                  A  上次訪問時間
                  W  上次寫入的時間
      /W          用寬列表格式。
      /X          顯示爲非 8dot3 文件名產生的短名稱。格式是 /N 的格式,短名稱插在長名稱前面。如果沒有短名稱,在其位置則顯示空白。
      /4          用四位數字顯示年
    
    可以在 DIRCMD 環境變量中預先設定開關。通過添加前綴 - (破折號)來替代預先設定的開關。例如,/-W。
    
  • SORT:對輸入進行分類。
    SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes] [[drive1:][path1]filename1] [/T [drive2:][path2]] [/O [drive3:][path3]filename3]
      /+n                         指定開始每個比較的字符號碼 n。/+3 說明每個比較應從每行的第三個字符開始。少於 n 個
    
    SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]
      [[drive1:][path1]filename1] [/T [drive2:][path2]]
      [/O [drive3:][path3]filename3]
      /+n                         指定開始每個比較的字符號碼 n。/+3 說明每個
                                  比較應從每行的第三個字符開始。少於 n 個字符
                                  的行排在其他行之前。按默認值,從每行的第一
                                  個字符開始比較。
      /L[OCALE] locale            用指定的區域設置替代系統默認區域設置。
                                  ""C"" 區域設置產生最快的排序順序並且是當前
                                  的唯一其他選擇。排序總是不分大小寫的。
      /M[EMORY] kilobytes         指定用於排序的主內存量,單位爲 KB。
                                  最小內存量總是 160 KB。如果指定內存大小,
                                  無論主內存的可用量是多少,指定的內存量會
                                  全部用於排序。
    
                                  要取得最佳性能,通常不指定內存大小。按默認
                                  值,如果達到默認最大內存值,排序會一次完成
                                  (非臨時文件);否則,排序會分兩次完成(沒有
                                  完全排序的數據存儲在臨時文件中);用於排序
                                  和合並的內存量相等。如果輸入和輸出都是文
                                  件,默認最大內存量爲可用主內存的 90%;
                                  否則,爲主內存的 45%。
      /REC[ORD_MAXIMUM] characters 指定記錄中的最大字符數量
                                  (默認值爲 4096,最大值爲 65535)。
      /R[EVERSE]                  顛倒排序順序,即,從 Z 到 A,再從 9 到 0。
      [drive1:][path1]filename1   指定要排序的文件。如果沒有指定,則排序標準
                                  輸入。指定輸入文件比將同一個文件重定向爲標
                                  準輸入快。
      /T[EMPORARY]
        [drive2:][path2]          指定保留排序工作存儲的目錄路徑,以防主內
                                  存無法容納數據。默認值是使用系統臨時目錄。
      /O[UTPUT]
        [drive3:][path3]filename3 指定在哪個文件中儲存經過排序的輸入。
                                  如果沒有指定,數據會被寫入標準輸出。指定
                                  輸出文件比將標準輸出重定向到同一個文件快。
    
  • 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" 在亮白色上產生亮紅色比較兩個文件或兩個文件集的內容。
  • COMP:比較兩個或兩套文件的內容。
    COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]]
    
      data1      指定要比較的第一個文件的位置和名稱。
      data2      指定要比較的第二個文件的位置和名稱。
      /D         用十進制格式顯示不同處。
      /A         用 ASCII 字符顯示不同處。
      /L         顯示不同的行數。
      /N=number  只比較每個文件中第一個指定的行數。
      /C         比較文件時不分 ASCII 字母的大小寫。
      /OFF[LINE] 不要跳過帶有脫機屬性集的文件。
    
    要比較文件集,在 data1 和 data2 參數中使用通配符。
    
  • FC:比較兩個文件或兩個文件集並顯示它們之間的不同
    FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn] [drive1:][path1]filename1 [drive2:][path2]filename2
    FC /B [drive1:][path1]filename1 [drive2:][path2]filename2
    
      /A         只顯示每個不同處的第一行和最後一行。
      /B         執行二進制比較。
      /C         不分大小寫。
      /L         將文件作爲 ASCII 文字比較。
      /LBn       將連續不匹配的最大值設爲指定的行數。
      /N         在 ASCII 比較上顯示行數。
      /OFF[LINE] 不要跳過帶有脫機屬性集的文件。
      /T         不要將 tab 擴充到空格。
      /U         將文件作爲 UNICODE 文字文件比較。
      /W         爲了比較而壓縮空白(tab 和空格)。
      /nnnn      指定不匹配處後必須連續匹配的行數。
      [drive1:][path1]filename1
                 指定要比較的第一個文件或第一個文件集。
      [drive2:][path2]filename2
                 指定要比較的第二個文件或第二個文件集。
    
  • ECHO:顯示信息,或將命令回顯打開或關上。
      ECHO [ON | OFF]
      ECHO [message]
    
    要顯示當前回顯設置,鍵入不帶參數的 ECHO。
    
    @echo off 不顯示後續命令行及當前命令行。
    @與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。
    
  • PRINT:打印文本文件。
    PRINT [/D:device] [[drive:][path]filename[...]]
       /D:device   指定打印機設備。
    
  • 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 值初始化成非零值。
    
  • ENDLOCAL:結束批處理文件中環境改動的本地化操作。
    在執行ENDLOCAL 之後所做的環境改動不再僅限於批處理文件。批處理文件結束後,原先的設置無法還原。
    
    ENDLOCAL
    
    如果命令擴展名被啓用,ENDLOCAL 會如下改變:
    
    如果相應的 SETLOCAL 用新的 ENABLEEXTENSIONS 或DISABLEEXTENSIONS 選項啓用或停用了命令擴展名,那麼,在 ENDLOCAL 之後,命令擴展名的啓用/停用狀態會還原到執行相應的 SETLOCAL 命令前的狀態。
    
  • FIND:在文件中搜索字符串。
    FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
    
      /V        顯示所有未包含指定字符串的行。
      /C        僅顯示包含字符串的行數。
      /N        顯示行號。
      /I        搜索字符串時忽略大小寫。
      /OFF[LINE] 不要跳過具有脫機屬性集的文件。
      "string"  指定要搜索的文字串,
      [drive:][path]filename
                指定要搜索的文件。
    
    如果沒有指定路徑,FIND 將搜索鍵入的或者由另一命令產生的文字。
    
  • FINDSTR:在文件中尋找字符串。
    FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
            [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
            strings [[drive:][path]filename[ ...]]
    
      /B        在一行的開始配對模式。
      /E        在一行的結尾配對模式。
      /L        按字使用搜索字符串。
      /R        將搜索字符串作爲一般表達式使用。
      /S        在當前目錄和所有子目錄中搜索匹配文件。
      /I        指定搜索不分大小寫。
      /X        打印完全匹配的行。
      /V        只打印不包含匹配的行。
      /N        在匹配的每行前打印行數。
      /M        如果文件含有匹配項,只打印其文件名。
      /O        在每個匹配行前打印字符偏移量。
      /P        忽略有不可打印字符的文件。 
      /OFF[LINE] 不跳過帶有脫機屬性集的文件。
      /A:attr   指定有十六進位數字的顏色屬性。請見 "color /?"
      /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       Escape: 元字符 x 的文字用法
      \<xyz    字位置: 字的開始
      xyz\>    字位置: 字的結束
    
    有關 FINDSTR 常見表達法的詳細情況,請見聯機命令參考。
    
  • PATH

爲可執行文件顯示或設置一個搜索路徑。

PATH [[drive:]path[;...][;%PATH%]
PATH ;

鍵入 PATH ; 清除所有搜索路徑設置並指示 cmd.exe 只在當前目錄中搜索。
鍵入 PATH 但不加參數,顯示當前路徑。
將 %PATH% 包括在新的路徑設置中會將舊路徑附加到新設置。
  • 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   如果當前驅動器不是網絡驅動器,顯示跟當前驅動器號或空字符串有關聯的遠程名。
  • PUSHD/POPD

PUSHD保存當前目錄以供 POPD 命令使用,然後改到指定的目錄。

PUSHD [path | ..]

  path   指定要成爲當前目錄的目錄。

如果命令擴展名被啓用,除了一般驅動器號和路徑,PUSHD 命令還接受網絡路徑。如果指定了網絡路徑,PUSHD 將創建一個指向指定網絡資源的臨時驅動器號,然後再用剛定義的驅動器號改變當前的驅動器和目錄。可以從 Z: 往下分配臨時驅動器號,使用找到的第一個沒有用過的驅動器號。

POPD更改到 PUSHD 命令存儲的目錄。

如果命令擴展被啓用,從推目錄堆棧 POPD 驅動器時,POPD命令會刪除 PUSHD 創建的臨時驅動器號。
  • REM

在批處理文件或 CONFIG.SYS 里加上註解或說明。

REM [comment]
:: [comment]
發佈了501 篇原創文章 · 獲贊 72 · 訪問量 139萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章