1. 程式人生 > >關於c#調出cmd.exe並執行cmd命令

關於c#調出cmd.exe並執行cmd命令

程式碼部分

class Cmd {
        private static string CmdPath = @"C:\Windows\System32\cmd.exe";

        /// <summary>
        /// 執行cmd命令
        /// 多命令請使用批處理命令連線符:
        /// <![CDATA[
        /// &:同時執行兩個命令
        /// |:將上一個命令的輸出,作為下一個命令的輸入
        /// &&:當&&前的命令成功時,才執行&&後的命令
        /// ||:當||前的命令失敗時,才執行||後的命令]]>
        /// 其他請百度
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="output"></param>
        public static void RunCmd (string cmd, out string output) {
            cmd = cmd.Trim ().TrimEnd ('&') + "&exit";//說明:不管命令是否成功均執行exit命令,否則當呼叫ReadToEnd()方法時,會處於假死狀態
            using (Process p = new Process ()) {
                p.StartInfo.FileName = CmdPath;
                p.StartInfo.UseShellExecute = false;        //是否使用作業系統shell啟動
                p.StartInfo.RedirectStandardInput = true;   //接受來自呼叫程式的輸入資訊
                p.StartInfo.RedirectStandardOutput = true;  //由呼叫程式獲取輸出資訊
                p.StartInfo.RedirectStandardError = true;   //重定向標準錯誤輸出
                p.StartInfo.CreateNoWindow = true;          //不顯示程式視窗
                p.Start ();//啟動程式

                //向cmd視窗寫入命令
                p.StandardInput.WriteLine (cmd);
                p.StandardInput.AutoFlush = true;

                //獲取cmd視窗的輸出資訊
                output = p.StandardOutput.ReadToEnd ();
                p.WaitForExit ();//等待程式執行完退出程序
                p.Close ();
            }
        }
    }

呼叫程式碼部分

string cmd = @"cd E:/工作目錄 & scene.exe -batchmode";
            string output = "";
            Cmd.RunCmd (cmd, out output);
            Console.WriteLine (output);
            Console.Read ();