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);
4

4 回答 4

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);

或将控制台标准输出重定向到流。

于 2012-12-11T17:07:08.517 回答
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);
            }
        }
于 2012-12-11T17:28:44.640 回答
0

另一个问题是您没有使用RedirectStandardOutput,因此输出被丢弃。看看这个答案

于 2012-12-11T17:12:11.107 回答
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);

同样在打开命令窗口的情况下,您可以查看命令中是否存在语法错误

于 2012-12-11T17:08:14.753 回答