【问题标题】:Start command windows and run commands inside启动命令窗口并在里面运行命令
【发布时间】:2010-09-01 07:53:23
【问题描述】:

我需要用一些参数启动命令窗口并在里面运行更多命令。

例如,启动 test.cmd 并运行 mkdir。

我可以使用 processstartinfo 启动 test.cmd,但我不确定如何运行更多命令。我可以将更多参数传递给 test.cmd 进程吗?

我该怎么做?

无法添加 cmets 来回答...所以写在这里。

安德里亚,这就是我要找的。但是上面的代码对我不起作用。

我正在启动一个 test.cmd,它是新的命令环境(如 razzle 构建环境),我需要运行更多命令。

psi.FileName = @"c:\test.cmd";
psi.Arguments = @"arg0 arg1 arg2";

psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;
psi.UseShellExecute = false;

Process p = new Process();
p.StartInfo = psi;
p.Start();
p.StandardInput.WriteLine(@"dir>c:\results.txt");
p.StandardInput.WriteLine(@"dir>c:\results2.txt"); 

【问题讨论】:

  • 我认为您必须将 psi.FileName 和 psi.Arguments 保留在我的代码中,然后执行 p.StandardInput.WriteLine(@"c:\test.cmd arg0 arg1 arg2");
  • 谢谢,我试过了,它奏效了。但是,有了这个,我试图读取控制台日志,它不返回我需要的输出。这是我用于澄清的完整代码。我期待的是 command123 的输出。
  • 进程 p = new Process(); p.StartInfo = psi; p.Start(); p.StandardInput.WriteLine(@"c:\test.cmd arg1 arg2 && cd /d c:\testdir\sample && command123 /c"); p.StandardInput.WriteLine(@"exit");字符串输出 = p.StandardOutput.ReadToEnd(); p.WaitForExit();
  • 我得到的输出是上面在控制台中运行的命令。如何获得 command123 的输出?

标签: c# command-line


【解决方案1】:

您可以使用该进程向 cmd.exe 发送更多命令 标准输入。您必须以这种方式重定向它:

var startInfo = new ProcessStartInfo
                    {
                        FileName = "cmd.exe",
                        RedirectStandardInput = true,
                        RedirectStandardOutput = true,
                        UseShellExecute = false,
                        CreateNoWindow = true
                    };

var process = new Process {StartInfo = startInfo};

process.Start();
process.StandardInput.WriteLine(@"dir>c:\results.txt");
process.StandardInput.WriteLine(@"dir>c:\results2.txt");
process.StandardInput.WriteLine("exit");

process.WaitForExit();

记得写“exit”作为你的最后一个命令,否则cmd进程不会正确终止...

【讨论】:

    【解决方案2】:

    /c 参数为cmd

    ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c pause");
    Process.Start(start);
    

    pause 只是您可以运行的示例)

    但是对于创建目录,您可以直接从 c# 执行该操作以及大多数其他文件操作

    System.IO.Directory.CreateDirectory(@"c:\foo\bar");
    

    仅当您有一些不想在 c# 中复制的大 bat 文件时,从 c# 启动 cmd 才有用。

    【讨论】:

      【解决方案3】:

      你想达到什么目的?例如,您真的需要打开一个命令窗口,还是只需要创建一个目录?

      mkdir 是 Windows 可执行文件 - 您可以像启动 cmd 一样启动此程序 - 无需先启动命令窗口进程。

      您还可以创建一个包含您要运行的所有命令的批处理文件,然后使用您已经在使用的 Process 和 ProcessStartInfo 类来启动它。

      【讨论】:

      • 温斯顿,mkdir 只是一个例子。我正在启动一个新的 cmd 环境(基本上存储环境变量的预设),我想运行更多命令。安德里亚的回答应该可以解决我的问题。但似乎对我不起作用。
      【解决方案4】:

      这怎么行不通?

          var startInfo = new ProcessStartInfo
          {
              FileName = "cmd.exe",
              RedirectStandardInput = true,
              RedirectStandardOutput = true,
              UseShellExecute = false,
              CreateNoWindow = false
          };
      
          var process = new Process { StartInfo = startInfo };
      
          process.Start();
          process.StandardInput.WriteLine(@" dir");
          process.WaitForExit();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多