來自三角貓
.Net本身的功能雖然很強,但是,有些時候,控制台、命令列的功用還是不可忽視的,恰當的使用命令列,可以起到事半功倍的效果
這裡要說的是以 .net 的程式為宿主,調用 命令列程式,執行某些操作,並將命令列的輸出結果返回到 .net 宿主裡。我們說的控制台程式,並不是單純的指cmd.exe/command.exe,而是泛指具有標準輸入、輸出功能的程式。因為通常的控制台程式,多數是在 cmd 命令列介面裡執行的,所以,我們以cmd為例子來說
大家在cmd命令列裡,敲入 help 或 ?,可以看到如下輸出:(以XP為例,其他動作系統差別不大)
ASSOC 顯示或修改副檔名關聯。
AT 計劃在電腦上啟動並執行命令和程式。
ATTRIB 顯示或變更檔屬性。
BREAK 設定或清除擴充式 CTRL+C 檢查。
CACLS 顯示或修改檔案的存取控制清單(ACLs)。
CALL 從另一個批次程式調用這一個。
CD 顯示目前的目錄的名稱或將其更改。
CHCP 顯示或設定活動字碼頁數。
CHDIR 顯示目前的目錄的名稱或將其更改。
CHKDSK 檢查磁碟並顯示狀態報表。
CHKNTFS 顯示或修改啟動時間磁碟檢查。
CLS 清除螢幕。
CMD 開啟另一個 Windows 命令解釋程式視窗。
COLOR 設定預設控制台前景和背景顏色。
COMP 比較兩個或兩套檔案的內容。
COMPACT 顯示或更改 NTFS 分區上檔案的壓縮。
CONVERT 將 FAT 卷轉換成 NTFS。您不能轉換當前磁碟機。
COPY 將至少一個檔案複製到另一個位置。
DATE 顯示或設定日期。
DEL 刪除至少一個檔案。
DIR 顯示一個目錄中的檔案和子目錄。
DISKCOMP 比較兩個磁碟片的內容。
DISKCOPY 將一個磁碟片的內容複寫到另一個磁碟片。
DOSKEY 編輯命令行、調用 Windows 命令並建立宏。
ECHO 顯示訊息,或將命令回顯開啟或關上。
ENDLOCAL 結束批檔案中環境更改的本地化。
ERASE 刪除至少一個檔案。
EXIT 退出 CMD.EXE 程式(命令解釋程式)。
FC 比較兩個或兩套檔案,並顯示不同處。
FIND 在檔案中搜尋文字字串。
FINDSTR 在檔案中搜尋字串。
FOR 為一套檔案中的每個檔案運行一個指定的命令。
FORMAT 格式化磁碟,以便跟 Windows 使用。
FTYPE 顯示或修改用於副檔名關聯的檔案類型。
GOTO 將 Windows 命令解釋程式指向批次程式中某個標明的行。
GRAFTABL 啟用 Windows 來以映像模式顯示擴充字元集。
HELP 提供 Windows 命令的協助資訊。
IF 執行批次程式中的條件性處理。
LABEL 建立、更改或刪除磁碟的卷標。
MD 建立目錄。
MKDIR 建立目錄。
MODE 配置系統裝置。
MORE 一次顯示一個結果螢幕。
MOVE 將檔案從一個目錄移到另一個目錄。
PATH 顯示或設定可執行檔的搜尋路徑。
PAUSE 暫停批檔案的處理並顯示訊息。
POPD 還原 PUSHD 儲存的目前的目錄的上一個值。
PRINT 列印文字檔。
PROMPT 更改 Windows 命令提示字元。
PUSHD 儲存目前的目錄,然後對其變更。
RD 刪除目錄。
RECOVER 從有問題的磁碟恢複可讀資訊。
REM 記錄批檔案或 CONFIG.SYS 中的注釋。
REN 重新命名檔案。
RENAME 重新命名檔案。
REPLACE 替換檔案。
RMDIR 刪除目錄。
SET 顯示、設定或刪除 Windows 環境變數。
SETLOCAL 開始批檔案中環境更改的本地化。
SHIFT 更換批檔案中可替換參數的位置。
SORT 對輸入進行分類。
START 啟動另一個視窗來運行指定的程式或命令。
SUBST 將路徑跟一個磁碟機代號關聯。
TIME 顯示或設定系統時間。
TITLE 設定 CMD.EXE 會話的視窗標題。
TREE 以圖形模式顯示磁碟機或路徑的目錄結構。
TYPE 顯示文字檔的內容。
VER 顯示 Windows 版本。
VERIFY 告訴 Windows 是否驗證檔案是否已正確寫入磁碟。
VOL 顯示磁碟卷標和序號。下面,我們舉個例子,比如: 取得當前的系統資訊,那麼我只需要調用 systeminfo 即可
//執行個體化一個進程類 Process cmd = new Process(); //獲得系統資訊,使用的是 systeminfo.exe 這個控制台程式 cmd.StartInfo.FileName = "systeminfo.exe"; //將cmd的標準輸入和輸出全部重新導向到.NET的程式裡 cmd.StartInfo.UseShellExecute = false; //此處必須為false否則引發異常 cmd.StartInfo.RedirectStandardInput = true; //標準輸入 cmd.StartInfo.RedirectStandardOutput = true; //標準輸出 //不顯示命令列視窗介面 cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmd.Start(); //啟動進程 //擷取輸出 //需要說明的:此處是指明開始擷取,要擷取的內容, //只有等進程退出後才能真正拿到 this.textBox1.Text = cmd.StandardOutput.ReadToEnd(); cmd.WaitForExit();//等待控制台程式執行完成 cmd.Close();//關閉該進程