2012-12-11 156 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); 
      } 
     }