C#读取控制台StandardOutput

时间:2018-03-26 21:30:29

标签: c# winforms process command-line-interface redirectstandardoutput

我正在尝试从C#winform应用程序运行控制台命令并读取它们的输出,但是当我输出时包含Windows“copyright”。

我认为我不能在每个\n字符上拆分输出并摆脱起始行,因为并非所有cmd版本都输出那些垃圾数据,所以有没有办法只获取对命令的“响应”而不是控制台中作为输出的整个文本?

这是我的代码:

    Process cmd = new Process();
    cmd.StartInfo.FileName = "cmd.exe";
    cmd.StartInfo.RedirectStandardInput = true;
    cmd.StartInfo.RedirectStandardOutput = true;
    cmd.StartInfo.CreateNoWindow = true;
    cmd.StartInfo.UseShellExecute = false;
    cmd.StartInfo.CreateNoWindow = true;
    cmd.Start();

    cmd.StandardInput.WriteLine("home-server scan");
    cmd.StandardInput.Flush();
    cmd.StandardInput.Close();
    cmd.WaitForExit();
    String output = cmd.StandardOutput.ReadToEnd();
    String[] devices = output.Split('\n');
    textBox1.Text = output;

这是我的输出(不介意控制台颜色代码):

Microsoft Windows [Version 10.0.16299.309]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\users\corrado\Documents\Programming\Projects\home-server-gui\home-server-gui\home-server-gui\bin\Debug>home-server scan
[32mFound following devices:[39m
[32mvodafone.station[39m: http://192.168.1.1:8080

C:\users\corrado\Documents\Programming\Projects\home-server-gui\home-server-gui\home-server-gui\bin\Debug>

如何摆脱所有垃圾文本?

1 个答案:

答案 0 :(得分:0)

这是因为您正在从Process运行cmd.exe。 只需将其更改为直接调用home-server.exe即可。 这应该有用。