通过c#在cmd.exe中逐个执行多个命令

时间:2017-03-13 09:27:37

标签: c# .net string windows cmd

我尝试通过c#代码在cmd.exe中运行以下命令。

  1. mkdir myfolder
  2. cd myfolder
  3. git init
  4. git remote set-url origin https://gitlab.company.com/testgroup/server.git
  5. git fetch --dry-run
  6. cd ..
  7. rmdir myfolder
  8. 我不知道如何在单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获取执行文本。我想要的文字如下图所示。

    The text I want

    我使用下面的代码来获取输出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

1 个答案:

答案 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);
}