在cmd中执行couple命令。仅执行一个命令

时间:2014-12-05 23:45:50

标签: c# cmd

HELLP。在我的'管道'中,我有3个命令应该按顺序执行,每个请求必须等到上一个命令结束。现在我已经完成了第一个请求,但第二个和第三个请求跳过... 你能否建议如何改变这种'管道'?

string strCmdText = s1;
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(strCmdText);
process.WaitForExit();

string strCmdText1 = s2;
process.StandardInput.WriteLine(strCmdText1);
process.WaitForExit();

string strCmdText2 = s3;
process.StandardInput.WriteLine(strCmdText2);
process.StandardInput.WriteLine("exit");

谢谢。

1 个答案:

答案 0 :(得分:0)

让我们查看您的代码:

  • 您启动cmd.exe的实例:

    var process = new Process { StartInfo = startInfo };
    process.Start();
    
  • 您可以将命令写入其标准输入:

    process.StandardInput.WriteLine(strCmdText);
    
  • 然后等待cmd.exe退出:

    process.WaitForExit();
    
  • 现在,您将另一个命令写入其标准输入:

    string strCmdText1 = s2;
    process.StandardInput.WriteLine(strCmdText1);
    
  • 等待,什么? cmd.exe已退出上一步,因此您无法再发送命令到首先。

  • 然后你等待进程退出,但很久以前它已经死了:

    process.WaitForExit();
    
  • 并重复相同的非工作代码:

    string strCmdText2 = s3;
    process.StandardInput.WriteLine(strCmdText2);
    process.StandardInput.WriteLine("exit");
    

你应该更好地了解现在的问题。执行第一个命令后,cmd.exe似乎退出。

你可以尝试一些事情:

  • 完全摆脱cmd.exe。除非您执行某个批处理脚本,否则可以直接调用预期的可执行文件(如python.exe)。

  • 为3个命令启动3个不同的cmd.exe实例。

  • 尝试将一些参数传递给cmd.exe,例如/Q

首先尝试第一种方法,它是最干净的方法。

相关问题