2012-12-11 155 views
0

以前有人問過如何在Visual Studio中用C#運行命令行命令,下面是答案。
我試圖調用一個名爲cccc的工具,它可以在命令行上運行。但是當我運行下面的代碼時,我沒有得到任何結果,也沒有顯示任何錯誤。
一般來說,我們如何從C#運行與命令行相同的命令並獲得相同的結果。假設我在命令行上調用一個程序(它可以是任何能夠在命令行上運行的程序,例如cccc,ccm等)並獲得一些結果。如何調用命令行並給出參數,這樣它就會調用cccc或其他方法,並執行與沒有C#的情況相同的操作。看不到命令​​行的結果

string strCmdText; 
strCmdText = "/C d: cd D:\\Exercises\\npp52\\PowerEditor\\src && dir /s /b | cccc - --outdir=d:\\myfolder"; 
System.Diagnostics.Process.Start("CMD.exe", strCmdText); 
+0

請格式化你的問題代碼,使其可讀..also你調試這個..?如果是這樣,請張貼您懷疑發生差異的代碼行 – MethodMan

回答

1

增加「暫停」到命令的末尾:

string strCmdText; 
strCmdText = "/C d: cd D:\\Exercises\\npp52\\PowerEditor\\src && dir /s /b | cccc - --outdir=d:\\myfolder & pause"; 
System.Diagnostics.Process.Start("CMD.exe", strCmdText); 

或重定向控制檯標準輸出流。

0

,而不是試圖把一個字符串中的一切,你可以採取ProcessStartInfo類的優勢,更好地定義你的論點

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = "CMD.EXE"; 
psi.WorkingDirectory = "D:\\Exercises\\npp52\\PowerEditor\\src "; 
psi.Arguments = "/C dir /s /b | cccc - --outdir=d:\\myfolder""; 
psi.WindowStyle = ProcessWindowStyle.Normal; 
Process.Start(psi); 
用命令窗口

同時打開,你可以看看是否有你的命令語法錯誤

0

另一個問題是你沒有使用RedirectStandardOutput,所以輸出被丟棄。看看this answer

1

這裏需要OutputDataReceived處理更神奇

void Main() 
{ 
    System.Diagnostics.Process proc = new System.Diagnostics.Process();      
         proc.StartInfo.FileName="cmd.exe"; 
         proc.StartInfo.Arguments = "/c ping 127.0.0.1"; 
         proc.StartInfo.UseShellExecute = false; 
         proc.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler); 
         proc.StartInfo.RedirectStandardOutput = true; 
         proc.Start();        
         proc.BeginOutputReadLine();      
         proc.WaitForExit();        
         proc.Close(); 
} 

private void SortOutputHandler(object sendingProcess, 
      DataReceivedEventArgs outLine) 
     { 
      if (!String.IsNullOrEmpty(outLine.Data)) 
      { 
      // Do what You need with out 
      Console.WriteLine(outLine.Data); 
      } 
     }