DOS管道與重定向

1、     重定向:
所謂重定向,就是不使用系統的標準輸入端口、標準輸出端口或標準錯誤端口,而進行從新的指定,因此重定向分爲輸出重定向、輸入重定向和錯誤重定向(注:
STDIN   0   標準輸入   鍵盤     命令在執行時所要的輸入數據經過它來取得
STDOUT   1   標準輸出   顯示器   命令執行後的輸出結果從該端口送出
STDERR   2   標準錯誤   顯示器   命令執行時的錯誤信息經過該端口送出   )。
一般狀況下重定向到一個文件。重定向命令又稱轉向命令。其中錯誤重定向和輸出重定向有些相似,就很少說,學過C++可能會明白的多些。
所 謂輸出重定向指把執行相應DOS命令時本應在屏幕上顯示的內容輸出到重定向命令所指向的文件或設備中去。輸出重定向命令 > 、>>。它們的區別是:若是你使用的是 > ,原文件會被刪除,從新生成新的文件,其內容如上所述;若是你使用的是 >> ,它以追加的方式,將命令的輸出寫入文件的末尾,原文件內容會被保留,新的內容會添加到原文件件的內容的後面。主要用在某個命令的輸出不少,在屏幕上不能徹底顯示,就可把它重定向到一個文件中,稍後再用文本編輯器來打開這個文件。
輸入重定向使輸入信息來自文件。若是一個名爲file.com的文件 C:>file 以後,執行file時所需的處理信息就改成由文件file讀入,這就是輸入重定向。小於號<是輸入重定向操做符,在<以後的文件名或設備名是重定向的輸入源。若是一個程序時須要輸入較多數據,使用輸入重定向能夠提升效率。在這裏要說一些過濾命令 more 、sort 和 find 。其中more進行分屏顯示;find 查找符合條件的內容;sort(按行)排序。
例如:(我是在windows命令提示符中用的)
例1:  
     more < f:\turboc2\readme
more的輸入來自 c:\tc\readme 文件內容多。這個命令與
type f:\turboc2\readme | more
做用相同,但更簡潔,效率也更高。
例2:(注cmd重定向進入後用exit返回原目錄)
   cmd > file 把 stdout 重定向到 file 文件中
   cmd >> file 把 stdout 重定向到 file 文件中(追加)
   cmd 1> file 把 stdout 重定向到 file 文件中
   cmd > file 2>&1 把 stdout 和 stderr 一塊兒重定向到 file 文件中
   cmd 2> file 把 stderr 重定向到 file 文件中
   cmd 2>> file 把 stderr 重定向到 file 文件中(追加)
   cmd >> file 2>&1 把 stderr 和 stderr 一塊兒重定向到 file 文件中
   cmd < file >file2 cmd 命令以 file 文件做爲 stdin,以 file2 文件做爲 stdout
       注:>&n 使用系統複製文件描述符 n 並把結果用做標準輸出
           <&n 標準輸入複製自文件描述符 n
           <&- 關閉標準輸入(鍵盤)
           >&- 關閉標準輸出
           n<&- 表示將 n 號輸入關閉
           n>&- 表示將 n 號輸出關閉
           &> 同時實現輸出重定向和錯誤重定向
用 途:DOS的標準輸入輸出一般是在標準設備鍵盤和顯示器上進行的, 利用重定向,能夠方便地將輸入輸出改向磁盤文件或其它設備。如在批處理命令執行期間爲了禁止命令或程序執行後輸出信息而擾亂屏幕, 可用DOS重定向功能把輸出改向NUL設備(NUL不指向任何實際設備): C:\>copy a.txt b.txt > NUL。命令執行結束不顯示"1 file(s) copied"的信息。有的交互程序在執行時要求不少鍵盤輸入, 但有時輸入是固定不變的, 爲加快運行速度, 可預先創建一個輸入文件,此文件的內容爲程序的鍵盤輸入項, 每一個輸入項佔一行。假若有一個程序cx 其輸入項所有包括在文件in.dat中, 執行 C:\>cx <in.dat>NUL 程序就自動執行。
2、     管道:
進程從「管道」的一端發送另外一端接收,也就是說將若干命令用輸入輸出「管道」串接在一塊兒,這就是管道;管道在某種程度上是輸入和輸出重定向的結合,前一個命令的輸出,做爲下一個命令的輸入,而不須要通過任何中間文件。豎線字符「|」是管道操做符,管道命令常常與上面講的過濾命令聯合使用。DOS的管道功能是使一個程序或命令的標準輸出用作另外一個程序或命令的標準輸入。如把DEBUG的輸入命令寫入文件aaa, 用type命令經過管道功能將aaa的內容傳輸給DEBUG, 在DEBUG執行期間再也不從控制檯索取命令參數, 從而提升了機器效率。命令爲: C:\>type aaa|DEBUG >bbb。
例如,這是我之前看到的例子。命令dir|more使得當前目錄列表在屏幕上逐屏顯示。dir的輸出是整個目錄列表,它不出如今屏幕上而是因爲符號「|」的規定,成爲下一個命令more的輸入,more命令則將其輸入,more命令則將其輸入一屏一屏地顯示,成爲命令行的輸出。再如命令dir|find」hello」>file,其中 dir的輸出是當前目錄列表,不出如今屏幕上而是成爲find命令的輸入。find命令在輸入文件中尋找指定字符串"hello"並輸出包含這個字符串的行,因爲輸出重定向符號>的規定,最後的輸出已存入文件file,不出如今屏幕上。命令dir|find"< dir >file則是將當前目錄項中的子目錄項尋找出來並存入文件file中。windows

相關文章
相關標籤/搜索