C# 从Cmd.exe C获取字符串#

C# 从Cmd.exe C获取字符串#,c#,C#,假设我有一个.bat文件,其中的文本是 回声你好 停顿 输出“你好”。 没有别的了 如果我从C#开始进程,也许我想在进程上空闲,并将它输出的所有内容都放在一个字符串中? 就像我扫描过程一样 我得到了代码,可以做到这一点,但在0秒之后,当进程启动时,它会获取它输出的内容,但只获取第一个。 如果我有一个100行的bat文件,那么可能只需要1行 总之,当bat文件输出任何新的内容时,我想在我的C#app中获得它 请帮忙 示例代码: Directory.SetCurrentDirectory(@"C:\

假设我有一个.bat文件,其中的文本是 回声你好 停顿

输出“你好”。 没有别的了

如果我从C#开始进程,也许我想在进程上空闲,并将它输出的所有内容都放在一个字符串中? 就像我扫描过程一样

我得到了代码,可以做到这一点,但在0秒之后,当进程启动时,它会获取它输出的内容,但只获取第一个。 如果我有一个100行的bat文件,那么可能只需要1行

总之,当bat文件输出任何新的内容时,我想在我的C#app中获得它

请帮忙

示例代码:

Directory.SetCurrentDirectory(@"C:\Users\WS\Desktop\Modded\"); 
Process p = new Process(); 
p.StartInfo.FileName = @"C:\Users\WS\Desktop\Modded\Launcher.bat"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.RedirectStandardOutput = true; 
p.Start(); 
txtLog.Text = 
p.StandardOutput.ReadToEnd(); 
p.Close(); 

~~redpoi0n

如果我正确理解您的要求,它应该返回一个字符串数组,听起来您只是在检索/显示数组的第一个元素。如果命令行有许多参数,则只需在数组中从0循环到数组大小

此外,txtLog可能需要更改为: txtLog.Text+=p.StandardOutput.ReadToEnd();
如果您正在添加日志。

显示您当前的代码。(如何准备示例代码:)我现在添加。。。。SetCurrentDirectory(@“C:\Users\WS\Desktop\moded\”);过程p=新过程();p、 StartInfo.FileName=@“C:\Users\WS\Desktop\moded\Launcher.bat”;p、 StartInfo.UseShellExecute=false;p、 StartInfo.CreateNoWindow=true;p、 StartInfo.RedirectStandardOutput=true;p、 Start();txtLog.Text=p.StandardOutput.ReadToEnd();p、 Close()@user841016:不要把它放在评论中,因为它是隐藏的和不可读的-把它放在问题中。到目前为止看起来还不错,只是我会在
p.Close()
之前调用
p.WaitForExit()
(但我认为这与您的问题无关)。你能用这段代码创建一个简短的bat文件来重现问题吗?是的,没错,但它是一个minecraft服务器,可以随时“生成”新字符串。就像BLLALBLALB加入了游戏。如果我不把p.关上;它不会归还任何东西。p.StandardOutPut.ReadToend()中的循环也不起作用,我想要一个实时流,您可以循环p.StandardOutPut.ReadLine();而不是“readToend();”是的,但我必须调用p.Stop();要从中获得一些东西,您需要异步输出,您可以在这里了解如何执行: