?? windows xp中的命令行界面.txt
字號:
Windows XP中的命令行界面
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
其中: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 命令行開關
- 整整兩個引號字符
- 在兩個引號字符之間沒有特殊字符,特殊字符為下列中的
一個: (大于符號)
$H Backspace (擦除前一個字符)
$L > - 邏輯移位
- 按位“與”
^ - 按位“異”
| - 按位“或”
= *= /= %= += -= - 賦值
&= ^= |= >=
- 表達式分隔符
如果您使用任何邏輯或取余操作符, 您需要將表達式字符串用引號擴起來。在表達式中
的任何非數字字符串鍵作為環境變量名稱,這些環境變量名稱的值已在使用前轉換成數字。如
果指定了一個環境變量名稱,但未在當前環境中定義,那么值將被定為零。這使您可以使用環
境變量值做計算而不用鍵入那些 % 符號來得到它們的值。如果 SET /A 在命令腳本外的命令
行執行的,那么它顯示該表達式的最后值。該分配的操作符在分配的操作符左邊需要一個環境
變量名稱。除十六進制有 0x 前綴,八進制有 0 前綴的,數字值為十進位數字。因此, 0x1
2 與 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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -