You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用cmd输出到日志出现重复行,如何仅读取指定目标行内容

问题根源

  • 现有逻辑逐行读取输出时,每一行不匹配目标字符串就会触发一次失败日志记录,cmd执行过程中输出的无关内容都会生成多余的失败记录
  • 额外逻辑错误:process.WaitForExit()被放在while循环内部,会导致第一次读取行后就阻塞等待进程退出,后续输出行无法正常读取

修复方案

新增一个标记位记录是否找到匹配的目标行,遍历完所有输出内容后,再统一根据标记位输出一次结果即可,不需要逐行输出状态。

修复后代码

start = DateTime.Now.ToString("HH:mm:ss tt");
// 新增匹配成功标记位,默认值为false
bool taskSuccess = false;

var process = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        Arguments = "/c command here",
        UseShellExecute = false,
        RedirectStandardOutput = true
    }
};

process.Start();

while (!process.StandardOutput.EndOfStream)
{
    string line = process.StandardOutput.ReadLine();
    Console.WriteLine(line);
    // 只要找到一次匹配就把标记位设为true,无需重复赋值
    if (line.Contains("Output goes here."))
    {
        taskSuccess = true;
    }
}
// 所有输出读取完成后再等待进程退出
process.WaitForExit();
finish = DateTime.Now.ToString("HH:mm:ss tt");
// 统一输出一次任务结果
if (taskSuccess)
{
    PrintRow("Task 1", start, finish, "SUCCESS");
}
else
{
    PrintRow("Task 1", start, finish, "FAILURE");
}
PrintLine();

内容的提问来源于stack exchange,提问作者Broski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:18:00