C# 如何获得命令提示符输出

C# 如何获得命令提示符输出,c#,wpf,svn,console,C#,Wpf,Svn,Console,我正在编写一个c#应用程序,用于验证有关SVN提交中行数更改的详细信息。在命令提示符中提供以下参数后,它将显示修订号、作者姓名和上次更改日期等 参数: svn信息–r{版本号}{源路径} 例如-svn信息-r 113653“F:\svn” 我也必须在C#中实现同样的目标。在C#中给出上述参数时,它应该从命令提示符中读取输出(修订号、作者姓名和上次更改日期),并将其存储在字符串中。我尝试了标准输出。ReadToEnd(),但无法满足我的要求。任何详细的解释都会很有帮助。您是否尝试过使用C#从命令提

我正在编写一个c#应用程序,用于验证有关SVN提交中行数更改的详细信息。在命令提示符中提供以下参数后,它将显示修订号、作者姓名和上次更改日期等

参数: svn信息–r{版本号}{源路径}

例如-svn信息-r 113653“F:\svn”


我也必须在C#中实现同样的目标。在C#中给出上述参数时,它应该从命令提示符中读取输出(修订号、作者姓名和上次更改日期),并将其存储在字符串中。我尝试了标准输出。ReadToEnd(),但无法满足我的要求。任何详细的解释都会很有帮助。

您是否尝试过使用C#从命令提示符运行命令,如中所述


您可以使用以下方法运行命令并从控制台检索标准输出:

    public static string StdOut(string args)
    {
        string cmdOut = "";

        ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/C " + args)
        {
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true
        };

        cmdOut = ExecuteCommand(cmdOut, startInfo);
        return cmdOut;
    }
它将以字符串形式返回输出。 您还需要此方法(如上所述):


p、 OutputdataReceived是一个,它将把接收到的任何std输出连接到cmdOut变量上

是的,我试过了。命令提示符打开,但未执行任何操作。但是当直接在命令提示符中给出参数时,它工作正常。哎呀,忘了命令文本中的
/C
。它实际上运行命令。请参阅我的编辑。当我按照上面的示例在命令中使用/c时,会打开多个cmd提示符窗口,并且不会执行任何操作。
    public static string StdOut(string args)
    {
        string cmdOut = "";

        ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/C " + args)
        {
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true
        };

        cmdOut = ExecuteCommand(cmdOut, startInfo);
        return cmdOut;
    }
    private static string ExecuteCommand(string cmdOut, ProcessStartInfo startInfo)
    {
        Process p = Process.Start(startInfo);
        p.OutputDataReceived += (x, y) => cmdOut += y.Data;
        p.BeginOutputReadLine();
        p.BeginErrorReadLine();
        p.WaitForExit();

        return cmdOut;
    }