source: http://blog.csdn.net/jifengszf/article/details/5956517
關於cmd 命令的重定向輸出 2>&1
mycommand >mylog.txt 2>&1
應該是最經典的用法了。
命令的結果可以通過“ %> ”的形式來定向輸出, % 表示文件描述符:1 為標准輸出 stdout 、 2 為標准錯誤stderr 。系統默認 % 值是1 ,也就是 “ 1> ”,而 1> 可以簡寫為 > ,也就是默認為 > 。stdout 的默認目標是終端,stderr 的默認目標為也是終端。
我們在批處理中執行:
echo text >result.txt
我們就可以在屏幕上會看到 echo text 1>result.txt ,即是這個道理。
其中& 需要直接與重定向符號結合使用。
應用實例:
1、 將結果輸出到result.txt
net stop myservices >>result 2>&1
2、 隱藏程序輸出結果
net stop myservices >nul 2>nul
微軟關於重定向的文章: 使用命令重定向操作符
可以使用重定向操作符將命令輸入和輸出數據流從默認位置重定向到其他位置。輸入或輸出數據流的位置稱為句柄。
下表將列出可用的句柄。
句柄 句柄的數字代號 描述
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