如何使用 C# 仅显示批处理文件输出的特定行

How can I display only a particular line of the batch file output using C#

我正在创建一个 C# windows 表单应用程序,它将自动检测连接到 COM 端口的设备并在标签或文本框中显示 COM 端口号。为了更容易实施,我创建了一个批处理文件,它为我提供了有关 COM 端口的信息。所以我 运行 批处理文件并将输出存储在一个名为 "result" 的字符串中。出于验证目的,我使用 "MessageBox.Show(result)" 显示输出。下一步是我想使用标签在 windows 表单中仅显示 "result" 的特定行。

//label1.text = 结果的第 9 行//我正在寻找这样的东西

我该怎么做?我的做法对吗?

附上代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Programming();
    }

    private void Programming()
    {
        var processInfo = new ProcessStartInfo(@"C:\Users\vaka\Desktop\COM_Port_Detection.bat");
        processInfo.CreateNoWindow = true;
        processInfo.UseShellExecute = false;
        //processInfo.RedirectStandardError = true;
        processInfo.RedirectStandardOutput = true;

        using (Process process = Process.Start(processInfo))
        {
            //
            // Read in all the text from the process with the StreamReader.
            //
            using (StreamReader reader = process.StandardOutput)
            {
                string result = reader.ReadToEnd();
                Console.Write(result);
                MessageBox.Show(result);
            }
        }
    }
}

你必须"parse"你从其他进程中读取的内容来提取所需的information/line。

一个简单的实现可能如下所示:

string result = reader.ReadToEnd();
string[] lines = result.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
if (lines.Length >= 9)
{
    Console.WriteLine(lines[8]);
}
else
{
    // handle error
}

你可以分别读取进程返回的每一行,然后只显示第9行:

using (StreamReader reader =  process.StandardOutput)
{
    var lines = new List<string>();
    string line;
    while ((line = reader.ReadLine()) != null)
        lines.Add(line);
    Console.Write(lines[8]);
    MessageBox.Show(lines[8]);
}