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) 也等於使用了目錄完成功能。
如果您在路徑字串兩端加上引號,完成功能鍵就可正確處理包含空格或其他
特殊字元的檔案名稱。還有,如果您備份後,又在命令列中呼叫完成功能的
話,已呼叫過完成功能的指標右方的文字會被丟棄。
要求加上引號的特殊字元有:
&()[]{}^=;!'+,`~
沒有留言:
張貼留言