批處理之命令重定向操作

1. 介紹

命令重定向操作符 (Redirection Operators)可以使用重定向操作符將命令輸入和輸出數據流從默認位置重定向到不同的位置。

重定向操作符 說明
> 將命令輸出寫入到文件或設備(例如打印機)中,而不是寫在命令提示符窗口中。
< 從文件中而不是從鍵盤中讀入命令輸入。
>> 將命令輸出添加到文件末尾而不刪除文件中的信息。
>& 將一個句柄的輸出寫入到另一個句柄的輸入中。
<& 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
| 從一個命令中讀取輸出並將其寫入另一個命令的輸入中。也稱作管道。

默認情況下,可以從鍵盤將命令輸入(即 STDIN 句柄)發送到 Cmd.exe,然後由 Cmd.exe 將命令輸出(即 STDOUT 句柄)發送到命令提示符窗口。輸入或輸出數據流的位置也被稱爲句柄。

句柄 句柄的數字代號 說明
STDIN 0 鍵盤輸入
STDOUT 1 輸出到命令提示符窗口
STDERR 2 錯誤輸出到命令提示符窗口
UNDEFINED 3-9 這些句柄由應用程序和各個具體工具單獨定義。

數字 0 到 9 代表前 10 個句柄。可以使用命令 Cmd.exe 運行程序並將前 10 個句柄中的任何一個重定向到該程序。要指定想使用的句柄,可在重定向操作符前面鍵入該句柄的數字。如果未定義句柄,則默認的 < 重定向輸入操作符是 0,而默認的 > 重定向輸出操作符是 1。鍵入 > 或 < 操作符之後,必須指定要讀取或寫入數據的位置。可以指定文件名或另一個現有的句柄.

要指定重定向到現有句柄,請使用與 (&) 字符,後面接要重定向的句柄號(例如 &句柄#)。例如,下面的命令可以將句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):

2. 用法

2.1. 重定向命令輸出 (>)

幾乎所有的命令都將輸出發送到命令提示符窗口。即使將輸出發送到驅動器或打印機的命令也會在命令提示符窗口顯示消息和提示。要將命令輸出從命令提示符窗口重定向到文件或設備,請使用 > 操作符。可以在許多命令中使用該操作符。

rem 將dir輸出stdin重定向到文件Dirlist.txt,每次文件都會被重新創建,stdout(1)爲默認可省略
dir 1>dirlist.txt
dir>dirlist.txt
rem 將打印信息重定向到文件,每次文件會被重新創建
echo abc>log.txt
rem 將所有的IP信息存入文件
ipconfig>Log.txt
rem 將stderr(2)重定向爲到文件
net stop xx 2>res.txt
rem 阻止輸出顯示,將默認輸出位置(句柄)重定向爲nul
echo invalie prompt >nul
echo invalie prompt 1>nul

2.2. 重定向命令輸入 (<)

要從鍵盤或設備重定向命令輸入,使用 < 操作符。

rem 重定向輸入是來自文件,並將輸入的文件內容按首字母排序
sort<file.txt 
rem 將從stdin輸入重定向爲從文件輸入,只輸入文件首行內容,stdin(0)是默認輸入,可以省略
set /p var=0<file.txt
set /p var=<file.txt
echo %var%
rem 將stdin輸入重定向爲nul,即不接受stdin輸入.只顯示提示信息,不接受stdin輸入,var沒有意義可以不用
set /p var=promptString<nul
set /p var=promptString 0<nul
set /p =promptStirng<nul

2.3. 重定向操作符追加輸出(>>)

要從命令中將輸出添加到文件末尾而不丟失文件中已存在的任何信息,請使用兩個連續的大於號(即 >>)。

rem 將dir輸出追加到文件Dirlist.txt中當前內容後面,文件不存在會被創建.stdout(1)爲默認可省略
dir 1>>dirlist.txt
dir>>dirlist.txt

2.4. 操作符重定向輸出和複製(>&)

如果將輸出重定向到文件且指定了現有的文件名,Cmd.exe 將以只寫方式打開文件並覆蓋該文件內容。

rem 將stdout作爲的stderr(錯誤提示)標準輸入,相當於將stdou當作tstderr顯示
echo promptString 1>&2
rem stdout重定向到文件,stderr(錯誤提示)也重定向到文件
net stop xx 1>res.txt 2>res.txt
rem stdout重定向到文件,將stderr(錯誤提示)作爲stdout(1)的輸入,效果同上,1可省略
net stop xx 1>res.txt 2>&1
net stop xx >res.txt 2>&1

2.5. 操作符重定向輸入和複製(<&)

要使用重定向輸入操作符 <&,指定的文件必須已經存在。如果輸入文件存在,Cmd.exe 將以只讀方式打開該文件,然後將文件中作爲輸入的字符發送到此命令(如同從鍵盤輸入一樣)。如果指定了句柄,Cmd.exe 將指定的句柄複製到系統現有的句柄中。

rem 將標準輸入(0,鍵盤輸入)當作標準輸出的輸入,然後將標準輸出重定義到文件,以下是等效的
echo 0<&1abcdefg 1>a.txt 
echo abcdefg 1>a.txt
echo abdefg >a.txt
rem 將stderr(2)當作標準輸出的輸入,然後將標準輸出重定義到文件
net stop xx >res.txt 2<&1

2.6. 使用管道操作符 (|)

管道操作符 (|) 可以提取一個命令的輸出(默認情況下是 STDOUT),然後將其導入另一個命令的輸入中(默認情況下是 STDIN)。

rem 將dir的輸出作爲sort的輸入
dir | sort
rem 查找當前目錄中包含".txt"的文件名
dir | find ".txt"
rem 爲format命令提供/y參數
echo /y | format a: /s /q /v:system
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章