我尝试通过c#代码在cmd.exe中运行以下命令。
我不知道如何在单Process.Start();
中传递所有参数。运行第4个命令后,我将获取输出string
并对string
执行一些操作。
我试过这个
const string strCmdText = "/C mkdir myfolder& cd myfolder& git init & git remote set-url origin https://gitlab.company.com/project.git & git fetch --dry-run & cd .. & rmdir myfolder";
Process.Start("CMD.exe", strCmdText);
以上命令正常工作。但我不知道如何从cmd.exe
获取执行文本。我想要的文字如下图所示。
我使用下面的代码来获取输出string
。但是在读取输出(string output = cmd.StandardOutput.ReadToEnd();
)的行中,执行停止了。我的意思是它不会进入下一行也不会终止程序。只需显示缺少屏幕。
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/C mkdir myfolder& cd myfolder& git init & git remote set-url origin https://gitlab.company.com/project.git & git fetch --dry-run & cd .. & rmdir myfolder";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
cmd.Start();
string output = cmd.StandardOutput.ReadToEnd();
Console.WriteLine(output);
如何获得输出string
?
答案 0 :(得分:0)
如果您使用'ReadToEnd',您将等待流结束。您应该使用“Read”或“ReadLine”来读取可用流上下文的部分内容:
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/C mkdir myfolder& cd myfolder& git init & git remote set-url origin https://gitlab.company.com/project.git & git fetch --dry-run & cd .. & rmdir myfolder";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
cmd.Start();
while (!cmd.StandardOutput.EndOfStream) {
string line = cmd.StandardOutput.ReadLine();
Console.WriteLine(line);
}