使用批次參數
Using batch parameters
您可以在批次檔案中的任何地方使用批次參數,以抽取出關於環境設定的資訊。
Cmd.exe 提供從 %0 到 %9 的批次參數擴充變數。當您在批次檔案中使用批次參數時,%0 由批次檔案名稱取代,%1 到 %9 由您在命令列中輸入的相應引數取代。若要存取超過 %9 的引數,則必須使用 shift 命令。如需 shift 命令的相關資訊,請參閱 Shift。%* 批次參數為參照到所有引數 (不包含 %0) 的萬用字元,它可以傳遞到批次檔案。
例如,若要將內容從 Folder1 複製到 Folder2,其中 %1 由值 Folder1 所取代,%2 由值 Folder2 所取代,請在名為 Mybatch.bat 的批次檔案中輸入下列內容:
xcopy %1\*.* %2
若要執行檔案,請輸入:
mybatch.bat C:\folder1 D:\folder2
這與在批次檔案中輸入下列內容會產生相同的效果:
xcopy C:\folder1 \*.* D:\folder2
您也可以對批次參數使用修正元。修正元使用目前磁碟機及目錄資訊,以展開批次參數為部份或完整的檔案、目錄名稱。若要使用修正元,請輸入百分號 (%) 字元,其後接代字號 (~) 字元,然後輸入適當的修正元 (即 %~modifier)。
下列表格列示了可以在擴充中使用的修正元。
修飾元 | 描述 |
---|---|
%~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。
%* 修正元代表在批次檔案中全部引數的唯一修正元。您不能將此修正元與 %~ 修正元組合使用。%~ 語法必須以有效的引數值作結尾。
您不能以與操作環境變數相同的方式操作批次參數。您不能搜尋並取代值或檢查子字串。不過,您可以將參數指派給環境變數,然後再操作該環境變數。
使用篩選器
Using filters
指令篩選與指令重新導向管道字元 (|) 一起使用,它是指令中的指令,讀取指令輸入、轉型輸入,並寫下輸出。filter 命令可協助您排序、檢視及選取命令輸出的片段。
Filter 命令會分割、重新整理或抽出透過其所傳遞的資訊。下列表格列示 Windows Server 2003 系列中可用的篩選命令。
命令 | 描述 |
---|---|
一次以一個 [命令提示字元] 視窗顯示檔案內容或命令輸出。
| |
在檔案及命令輸出中搜尋指定的字元。
| |
依字母順序排列檔案及命令輸出。
|
若要將來自檔案的輸入傳送給篩選命令,請使用小於符號 (<)。若要篩選命令從其他命令中取得輸入,請使用管道字元 (|)。
Using the more command
more 命令會一次在一個 [命令提示字元] 視窗中顯示檔案的內容或命令的輸出。例如,一次在一個 [命令提示字元] 視窗中顯示 List.txt 檔案的內容,請輸入:
more < list.txt
[命令提示字元] 視窗中即會出現資訊,然後
-- More --
提示會在 [命令提示字元] 視窗的底部出現。若要繼續進行到下一個 [命令提示字元] 視窗,請按鍵盤上 PAUSE 以外的任意鍵。若要停止命令而不檢視其他資訊,請按 CTRL+C 鍵。
當使用的命令產生多個 [命令提示字元] 視窗的輸出時,可以使用 more 命令。例如,假設您要檢視硬碟的樹狀目錄。如果您的目錄多於 [命令提示字元] 視窗中能顯示的數量,則您可以使用 tree 命令及管道字元 (|) 以及 more 命令,如下所示:
tree c:\ | more
tree 命令輸出的第一個 [命令提示字元] 視窗即會出現,其後伴隨
-- More --
提示。輸出會暫停,並等待您按鍵盤上的任意鍵 (除了 PAUSE 鍵)。Using the find command
find 命令在檔案中尋找指定的字串或文字。Cmd.exe 會在 [命令提示字元] 視窗中顯示符合指定之字串或文字的每一行。find 命令可作為篩選命令或標準命令使用。如需使用 find 作為標準命令的相關資訊,請參閱 Find。
若要使用 find 作為篩選命令,命令中必須包含小於符號 (<) 及要搜尋的字串或文字。find 搜尋預設會區分大小寫。例如,下列命令會在檔案 Trade.txt 中尋找字串 "Pacific Rim":
find "Pacific Rim" < trade.txt
輸出不包含任何 "pacific rim"。其僅包含首字母大寫的 "Pacific Rim"。
若要僅儲存 find 命令的輸出,而使其不在 [命令提示字元] 視窗中顯示,請輸入大於符號 (>) 及要儲存輸出的檔名。例如,下列命令會在 Trade.txt 檔案中尋找 "Pacific Rim",並將找到的結果儲存在 Nwtrade.txt 檔案中:
find "Pacific Rim" < trade.txt > nwtrade.txt
Using the sort command
sort 命令會依照字母排序文字檔或命令的輸出。例如,下列命令為檔案 List.txt 的內容排序,並在 [命令提示字元] 視窗中顯示結果:
sort < list.txt
在此範例中,sort 命令會依字母排序 List.txt 檔案中的各行,並將結果顯示出來,而無需變更檔案。若要儲存 sort 命令的輸出而不顯示出來,請輸入大於符號 (>) 及檔名。例如,下列命令會依照字母順序排序 List.txt 檔案中的各行,並將結果存放在 Alphlist.txt 檔案中:
sort < list.txt > alphlist.txt
若要排序命令的輸出,請依序輸入該命令、管道字元 (|) 及 sort (即 Command | sort)。例如,下列命令按照字母順序排列包含字串 "Jones" 的行 (即 find 命令輸出):
find "Jones" maillst.txt | sort
--------------------------------------------------------------------------
使用命令重新導向運算子
Using command redirection operators
您可以使用重新導向運算子,從預設位置將命令輸入和輸出資料流重新導向至不同位置。輸入或輸出資料流位置是指控制碼。
下表列出可用的控制碼。
控制碼 | 控制碼的數值同義字 | 描述 |
---|---|---|
STDIN
|
0
|
鍵盤輸入
|
STDOUT
|
1
|
輸出至 [命令提示字元] 視窗
|
STDERR
|
2
|
發生錯誤時輸出至 [命令提示字元] 視窗
|
UNDEFINED
|
3-9
|
應用程式分別定義控制碼而且每一個工具都有特定的控制碼
|
數 字零到九 (亦即,0-9) 代表前 10 個控制碼。您可以使用 Cmd.exe 以執行程式並重新導向該程式的前 10 個控制碼。若要指定要使用哪一個控制碼,請在重新導向運算子前面鍵入控制碼號碼。若沒有定義控制碼,那麼預設 < 重新導向輸入運算子是零 (0) 和預設 > 重新導向輸出運算子是一 (1)。輸入 < 或 > 運算子之後,您必須指定要讀取或寫入資料的位置。您可以指定檔案名稱或另一個現存的控制碼。
若要指定重新導向現有的控制碼,請使用 (&) 字元後面加上要重新導向的控制碼 (亦即,&handle#)。例如,下列命令將控制碼 2 (亦即,STDERR) 重新導向為控制碼 1 ( 亦即,STDOUT):
2>&1
下表列出可用來重新導向輸入和輸出資料流的運算子。
重新導向運算子 | 描述 |
---|---|
>
|
將命令輸出寫入到檔案或裝置 (例如印表機),而不是 [命令提示字元] 視窗或控制碼。
|
<
|
從檔案讀取命令輸入,而不是從鍵盤或控制碼讀取輸入。
|
>>
|
附加命令輸出到檔案結尾,而不刪除檔案中已有的資訊。
|
>&
|
將一個控制碼的輸出寫至另一個控制碼的輸入。
|
<&
|
從一個控制碼讀取輸入並將它寫至另一個控制碼的輸出。
|
|
|
從一個命令讀取輸出並將它寫至另一個命令的輸入。也稱為管線。
|
在預設狀況下,您從鍵盤傳送命令輸入 (亦即,STDIN 控制碼) 到 Cmd.exe,然後 Cmd.exe 會將命令輸出 (亦即,STDOUT 控制碼) 傳送至 [命令提示字元] 視窗。
Redirecting input (<)
若要從鍵盤將輸入重新導向到檔案或裝置,請使用 < 運算子。例如,從 File.txt 取得 sort 命令的輸入:
sort<file.txt
File.txt 的內容會以字母排序的清單出現在 [命令提示字元] 視窗。
< 運算子使用唯讀存取權開啟指定的檔案名稱。因此,當您使用此運算子時會無法寫入該檔案。例如,若使用 <&2 啟動程式,讀取控制碼 0 會失敗,因為是使用唯寫存取權開啟控制碼 2。
附註
- 0 是 < 重新導向輸入運算子的預設控制碼。
Redirecting output (>)
幾乎全部命令都將輸出傳送到 [命令提示字元] 視窗。即使將輸出傳送到磁碟機或印表機的命令,也會在 [命令提示字元] 視窗顯示訊息和提示。
若要從 [命令提示字元] 視窗將輸出重新導向到檔案或裝置,請使用 > 運算子。您可以使用此運算子搭配大部份命令。例如,重新導向 dir 輸出到 Dirlist.txt:
dir>dirlist.txt
若 Dirlist.txt 不存在,那麼 Cmd.exe 會建立它。如果 Dirlist.txt 存在,則 Cmd.exe 會用 dir 命令的輸出以取代檔案中的資訊。
若要執行 netsh routing dump 命令,然後將輸出傳送到 Route.cfg,請輸入:
netsh routing dump>c:\route.cfg
>運算子會使用唯寫存取權以開啟指定的檔案。因此,當您使用此運算子時無法讀取該檔案。例如,如果使用重新導向 >&0 啟動程式,則所有寫入控制碼 1 的嘗試都會失敗,因為最初是使用唯讀存取權開啟控制碼 0。
附註
- 1 是 > 重新導向輸出運算子的預設控制碼。
Duplicating handles
& 重新導向運算子會從一個指定的控制碼將輸出或輸入複製到另一個指定的控制碼。例如,若要傳送 dir 輸出到 File.txt 以及傳送錯誤輸出到 File.txt,請輸入:
dir>c:\file.txt 2>&1
重複一個控制碼時,則會重複此控制碼原始出現時的所有特性。例如,如果控制碼有唯寫存取權,則該控制碼的全部複本皆會具有唯寫存取權。您無法將具有唯讀存取權的控制碼複製到具有唯寫存取權的控制碼中。
Using the & operator to redirect input and duplicate
若 要一起使用重新導向輸入運算子 (<) 和重複運算子 (&),則您指定的檔案必須已存在。如果輸入檔案存在,Cmd.exe 就會以唯讀方式開啟它,然後將檔案所含的字元作為輸入傳送到命令,就好像從鍵盤輸入這些字元一樣。若指定控制碼,Cmd.exe 就會將您指定的控制碼複製到系統中的現存控制碼。
例如,若要開啟 File.txt 作為控制碼 0 的輸入讀取 (亦即,STDIN),請輸入:
<file.txt
若要開啟 File.txt,排序內容,然後將輸出傳送到 [命令提示字元] 視窗 (亦即,STDOUT),請輸入:
sort<file.txt
若要尋找 File.txt,然後將控制碼 1 (亦即,STDOUT) 和控制碼 2 ( 亦即,STDERR) 重新導向到 Search.txt,請輸入:
findfile file.txt>search.txt 2<&1
若要重複使用者定義的控制碼 3 作為控制碼 0 的輸入讀取 (亦即,STDIN),請輸入:
<&3
Using the & operator to redirect output and duplicate
如果將輸出重新導向到某檔案而且指定現有的檔案名稱,則 Cmd.exe 會以唯寫方式開啟檔案並覆寫檔案內容。若指定控制碼,Cmd.exe 會將檔案複製到現有的控制碼。
若要將使用者定義的控制碼 3 複製到控制碼 1,請輸入:
>&3
若要從 ipconfig 命令將包含控制碼 2 (亦即,STDERR) 的所有輸出重新導向到控制碼 1 (亦即,STDOUT),然後重新導向輸出到 Output.log,請輸入:
ipconfig.exe>>output.log 2>&1
Using the >> redirection operator to append output
若要將命令的輸出新增到檔案結尾,而不遺失檔案中存在的任何資訊,請使用二個大於符號 (亦即,>>)。例如,在下列命令中,dir 命令所產生的目錄清單會附加到 Dirlist.txt 檔案中:
dir>>dirlist.txt
若要將 netstat 命令的輸出附加到 Tcpinfo.txt 結尾,請輸入:
netstat>>tcpinfo.txt
Using the pipe operator (|)
管線運算子 (|) 採用一個命令的輸出 (預設為 STDOUT),然後將它導向到另一個命令的輸入 (預設為 STDIN)。例如,下列命令會排序目錄:
dir | sort
在此範例中,同時啟動命令,然後暫停 sort 命令直到它接收 dir 命令的輸出。sort 命令會使用 dir 命令的輸出作為它的輸入,然後傳送它的輸出到控制碼 1 (亦即,STDOUT)。
Combining commands with redirection operators
您可以結合篩選命令與其他命令和檔案名稱,來建立自訂命令。例如,使用下列命令,可以存放含有 LOG 字串的檔名:
dir /b | find "log" loglist.txt
透過 find 篩選命令傳送 dir 命令的輸出。含有 LOG 字串的檔案名稱是儲存成 Loglist.txt 檔案中的檔案名稱清單 (例如:NetshConfig.log、Logdat.svd 和 Mylog.bat)。
若要在相同的命令中使用一個以上的篩選器,請以管線 (|) 區隔各個篩選器。例如,下列命令會搜尋 C 磁碟機中的各個目錄,尋找含有 Log 字串的檔名,並一次在一個 [命令提示字元] 視窗中顯示搜尋結果:
dir c:\ /s /b | find "log" | more
透過使用管線 (|),您透過 find 篩選命令,導向 Cmd.exe 以傳送 dir 命令輸出。find 命令只會選取內含 Log 字串的檔名。more 命令會顯示由 find 命令選取的檔案名稱,並且一次顯示一個 [命令提示字元] 視窗。如需篩選器命令的相關資訊,請參閱 使用篩選器。
沒有留言:
張貼留言