1. 程式人生 > >DOS中執行程式後的重定向

DOS中執行程式後的重定向

二、 重定向:
所謂重定向,就是不使用系統的標準輸入埠、標準輸出埠或標準錯誤埠,而進行重新的指定,所以重定向分為輸出重定向、輸入重定向和錯誤重定向(注:
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 把 stdeout和 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 程式就自動執行。
二、     管道:
進 程從“管道”的一端傳送另一端接收,也就是說將若干命令用輸入輸出“管道”串接在一起,這就是管道;管道在某種程度上是輸入和輸出重定向的結合,前一個命 令的輸出,作為下一個命令的輸入,而不需要經過任何中間檔案。豎線字元“|”是管道操作符,管道命令經常與上面講的過濾命令聯合使用。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中。