【问题标题】:multiple command one by one in cmd.exe via c#通过c#在cmd.exe中一一执行多个命令
【发布时间】:2017-03-13 09:27:37
【问题描述】:

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

  1. mkdir 我的文件夹
  2. cd 我的文件夹
  3. git 初始化
  4. git 远程设置-url 来源https://gitlab.company.com/testgroup/server.git
  5. git fetch --dry-run
  6. cd ..
  7. rmdir 我的文件夹

我不知道如何在单个 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

【问题讨论】:

  • 是的。但不用于清除我的异常。我的输出字符串将是“”。
  • 总是可以通过 IO 命名空间在 C# 中执行 mkdir/rmdir/cd

标签: c# .net string windows cmd


【解决方案1】:

如果您使用“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);
}

【讨论】:

  • 我按照你说的修改了我的代码,但在while (!cmd.StandardOutput.EndOfStream) 行中遇到了同样的黑屏异常
  • 很奇怪,因为对我来说它工作正常。在明确的 C# 控制台项目上试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多