mycommand >mylog.txt 2>&1 應該是最經典的用法了。
命令的結果可以通過“%>”的形式來定向輸出,%表示檔案描述符:1為標準輸出stdout、2為標準錯誤stderr。系統預設%值是1,也就是“1>”,而1>可以簡寫為>,也就是預設為>。stdout的預設目標是終端,stderr的預設目標為也是終端。我們在批處理中執行: echo text >result.txt ,我們就可以在螢幕上會看到 echo text 1>result.txt ,即是這個道理。
其中&需要直接與重新導向符號結合使用。
參考:
1、http://www.google.cn/search?q="2>%261"
2、http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/04969a04-a424-4776-bdc7-dc5066ce79b2.mspx?mfr=true
應用執行個體:
1、將結果輸出到result.txt
net stop myservices >>result 2>&1
2、隱藏程式輸出結果
net stop myservices >nul 2>nul
微軟關於重新導向的文章:
使用命令重新導向操作符更新日期: 01/21/2005
使用命令重新導向操作符
可以使用重新導向操作符將命令輸入和輸出資料流從預設位置重新導向到其他位置。輸入或輸出資料流的位置稱為控制代碼。
下表將列出可用的控制代碼。
|
控制代碼 |
控制代碼的數字代號 |
描述 |
STDIN |
0 |
鍵盤輸入 |
STDOUT |
1 |
輸出到命令提示字元視窗 |
STDERR |
2 |
錯誤輸出到命令提示字元視窗 |
UNDEFINED |
3-9 |
控制代碼由應用程式單獨定義,它們是各個工具特有的 |
數字 0 到 9 代表前 10 個控制代碼。可以使用命令 Cmd.exe 運行程式,並對該程式前 10 個控制代碼中的任何一個控制代碼進行重新導向。要指定要用的控制代碼,請在重新導向操作符之前鍵入該控制代碼的數字。如果未定義控制代碼,則預設的 < 重新導向輸入操作符是 0,而預設的 > 重新導向輸出操作符是 1。鍵入 < 或 > 操作符之後,必須指定資料的讀寫位置。可以指定檔案名稱或其他現有的控制代碼。
要指定重新導向到現有控制代碼,請使用與 (&) 字元,後面接要重新導向的控制代碼號(即 &控制代碼號)。例如,下面的命令可以將控制代碼 2(即 STDERR)重新導向到控制代碼 1(即 STDOUT):
2>&1
下表列出了可用於重新導向輸入和輸出資料流的操作符。
|
重新導向操作符 |
描述 |
> |
將命令輸出寫入到檔案或裝置(如印表機),而不是命令提示字元視窗或控制代碼。 |
< |
從檔案而不是從鍵盤或控制代碼讀入命令輸入。 |
>> |
將命令輸出添加到檔案末尾而不刪除檔案中已有的資訊。 |
>& |
將一個控制代碼的輸出寫入到另一個控制代碼的輸入中。 |
<& |
從一個控制代碼讀取輸入並將其寫入到另一個控制代碼輸出中。 |
| |
從一個命令中讀取輸出並將其寫入另一個命令的輸入中。也稱作管道。 |
預設情況下,可以從鍵盤將命令輸入(即 STDIN 控制代碼)發送到 Cmd.exe,然後由 Cmd.exe 將命令輸出(即 STDOUT 控制代碼)發送到命令提示字元視窗。
重新導向輸入 (<)
要通過鍵盤將輸入重新導向到檔案或裝置,請使用 < 操作符。例如,要從 File.txt 擷取 sort 命令的輸入,請鍵入:
sort<file.txt
File.txt 的內容將以字母順序列表的方式顯示在命令提示字元視窗中。
< 操作符可以開啟具有唯讀存取權限的指定檔案名稱。因此,不能在使用該操作符時向檔案中寫入資訊。例如,如果以 <&2 啟動程式,則所有試圖讀取控制代碼 0 的操作都將失敗,因為控制代碼 2 最初是以唯寫訪問方式開啟的。
注意
• |
0 是 < 重新導向輸入操作符的預設控制代碼。 |
重新導向輸出 (>)
幾乎所有的命令都將輸出發送到命令提示字元視窗。即使將輸出發送到磁碟機或印表機的命令也會在命令提示字元視窗顯示訊息和提示。
要將輸出從命令提示字元視窗重新導向到檔案或裝置,請使用 > 操作符。可以在許多命令中使用該操作符。例如,要將 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 是 > 重新導向輸出操作符的預設控制代碼。 |
複製控制代碼
重新導向操作符 & 可以將輸出或輸入從一個指定控制代碼複製到另一個指定的控制代碼。例如,要將 dir 輸出發送到 File.txt 並將錯誤輸出發送到 File.txt,請鍵入:
dir>c:/file.txt 2>&1
複製控制代碼時,可以複製該控制代碼原狀態的所有特性。例如,如果一個控制代碼具有唯讀訪問的屬性,則該控制代碼的所有副本都具有唯讀訪問屬性。不能將一個具有唯讀訪問屬性的控制代碼複製到另一個具有唯寫訪問屬性的控制代碼。
使用 & 操作符重新導向輸入和副本
要將重新導向輸入操作符 (<) 與複製操作符 (&) 結合使用,指定的檔案必須已經存在。如果輸入檔案存在,Cmd.exe 將以唯讀方式開啟該檔案,然後將檔案包含的字元作為輸入發送到此命令(如同從鍵盤輸入一樣)。如果指定了控制代碼,Cmd.exe 將指定的控制代碼複製到系統現有的控制代碼中。
例如,要以控制代碼 0 輸入讀取(即 STDIN)的方式開啟 File.txt,請鍵入:
<file.txt
要開啟 File.txt,並在內容排序後將輸出發送到命令提示字元視窗(即 STDOUT),請鍵入:
sort<file.txt
要尋找 File.txt,然後將控制代碼 1(即 STDOUT)和控制代碼 2(即 STDERR)重新導向到 Search.txt,請鍵入:
findfile file.txt>search.txt 2<&1
要以控制代碼 0 輸入讀取(即 STDIN)的方式複製使用者定義的控制代碼 3,請鍵入:
<&3
使用 & 操作符重新導向輸出和複製
如果將輸出重新導向到檔案且指定了現有的檔案名稱,Cmd.exe 將以唯寫方式開啟檔案並覆蓋該檔案內容。如果指定了控制代碼,Cmd.exe 將檔案複製到現有控制代碼中。
要將使用者定義的控制代碼 3 複製到控制代碼 1,請鍵入:
>&3
要將包括控制代碼 2(即 STDERR)的所有輸出從 ipconfig 命令重新導向到控制代碼 1(即 STDOUT),然後將輸出重新導向到 Output.log,請鍵入:
ipconfig.exe>>output.log 2>&1
使用 >> 重新導向操作符附加輸出
要從命令中將輸出添加到檔案末尾而不丟失檔案中已存在的任何資訊,請使用兩個連續的大於符號(即 >>)。例如,使用下列命令可以將 dir 命令產生的目錄列表附加到 Dirlist.txt 檔案:
dir>>dirlist.txt
要將 netstat 命令的輸出附加到 Tcpinfo.txt 的末尾,請鍵入:
netstat>>tcpinfo.txt
使用管道操作符 (|)
管道操作符 (|) 可以提取一個命令的輸出(預設情況下是 STDOUT),然後將其定向到另一個命令的輸入(預設情況下是 STDIN)中。例如,使用下面的命令可以對目錄進行分類:
dir | sort
在本例中,將同時啟動兩個命令,但隨後 sort 命令會暫停,直到它接收到 dir 命令的輸出為止。sort 命令使用 dir 命令的輸出作為輸入,然後將輸出發送到控制代碼 1(即 STDOUT)。
合并帶重新導向操作符的命令
通過合并帶有其他命令和檔案名稱的篩選器命令,可以建立自訂命令。例如,可以使用以下命令儲存包含“LOG”字串的檔案名稱:
dir /b | find "log" loglist.txt
dir 命令的輸出是通過 find 篩選器命令進行發送的。包含字串“LOG”的檔案名稱作為檔案名稱列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)儲存在檔案 Loglist.txt 中。
要在相同命令中使用多個篩選器,請使用管道 (|) 分隔篩選器。例如,下面的命令將搜尋 C 盤上的每個目錄以尋找包含“LOG”字串的檔案名稱,並且在命令提示字元視窗中每次顯示一屏:
dir c:/ /s /b | find "log" | more
利用管道 (|) 可以對 Cmd.exe 進行定向,使其通過 find 篩選器命令發送 dir 命令輸出。find 命令只選擇包含字串“LOG”的檔案名稱。more 命令可以顯示 find 命令選擇的檔案名稱(在命令提示字元視窗中每次顯示一屏)。有關篩選器命令的詳細資料,請參閱使用篩選器。