C#程式呼叫cmd執行命令
阿新 • • 發佈:2018-11-06
string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe"; 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(str + "&exit"); p.StandardInput.AutoFlush = true; //p.StandardInput.WriteLine("exit"); //向標準輸入寫入要執行的命令。這裡使用&是批處理命令的符號,表示前面一個命令不管是否執行成功都執行後面(exit)命令,如果不執行exit命令,後面呼叫ReadToEnd()方法會假死 //同類的符號還有&&和||前者表示必須前一個命令執行成功才會執行後面的命令,後者表示必須前一個命令執行失敗才會執行後面的命令 //獲取cmd視窗的輸出資訊 string output = p.StandardOutput.ReadToEnd(); //StreamReader reader = p.StandardOutput; //string line=reader.ReadLine(); //while (!reader.EndOfStream) //{ // str += line + " "; // line = reader.ReadLine(); //} p.WaitForExit();//等待程式執行完退出程序 p.Close(); Console.WriteLine(output);
程式執行結果:
需要提醒注意的一個地方就是:在前面的命令執行完成後,要加exit命令,否則後面呼叫ReadtoEnd()命令會假死。
另一種C#呼叫cmd命令的方法:
/// <summary> /// 執行cmd命令 /// 會顯示命令視窗 /// </summary> /// <param name="cmdExe">指定應用程式的完整路徑</param> /// <param name="cmdStr">執行命令列引數</param> static bool RunCmd(string cmdExe, string cmdStr) { bool result = false; try { using (Process myPro = new Process()) { //指定啟動程序是呼叫的應用程式和命令列引數 ProcessStartInfo psi = new ProcessStartInfo(cmdExe, cmdStr); myPro.StartInfo = psi; myPro.Start(); myPro.WaitForExit(); result = true; } } catch { } return result; } /// <summary> /// 執行cmd命令 /// 不顯示命令視窗 /// </summary> /// <param name="cmdExe">指定應用程式的完整路徑</param> /// <param name="cmdStr">執行命令列引數</param> static bool RunCmd2(string cmdExe, string cmdStr) { bool result = false; try { using (Process myPro = new Process()) { myPro.StartInfo.FileName = "cmd.exe"; myPro.StartInfo.UseShellExecute = false; myPro.StartInfo.RedirectStandardInput = true; myPro.StartInfo.RedirectStandardOutput = true; myPro.StartInfo.RedirectStandardError = true; myPro.StartInfo.CreateNoWindow = true; myPro.Start(); //如果呼叫程式路徑中有空格時,cmd命令執行失敗,可以用雙引號括起來 ,在這裡兩個引號表示一個引號(轉義) string str = string.Format(@"""{0}"" {1} {2}", cmdExe, cmdStr, "&exit"); myPro.StandardInput.WriteLine(str); myPro.StandardInput.AutoFlush = true; myPro.WaitForExit(); result = true; } } catch { } return result; }
原文章:點選開啟連結
using System.Diagnostics;
public class CmdHelper
{
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();
}
}
}
使用示例
示例1:顯示ipconfig資訊
string cmd [email protected]"ipconfig/all";
示例2:開啟VS2010命令提示
string cmd [email protected]"C:&cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC&vcvarsall.bat";
示例3:使用sn.exe工具產生金鑰對並顯示
string cmd [email protected]"C:&cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC&vcvarsall.bat&sn -k d:\LicBase.snk&sn -p d:\LicBase.snk d:\LicBasePubKey.snk&sn -tp d:\LicBasePubKey.snk";
呼叫
string output = "";
CmdHelper.RunCmd(cmd, out output);
MessageBox.Show(output);
文章連結:
點選開啟連結