来自C#的多个CMD命令?

时间:2011-05-19 14:18:18

标签: c# cmd

所以我想知道,如何使用C#在CMD中执行多个命令?我的意思是这个...我有一个.exe文件依赖于通过cmd变量(VAMP_PATH)查找文件[是的我正在使用VAMP插件]。所以我在CMD中使用它的方式是:

-set VAMP_PATH:C:\ (press Enter)
-sonic-annotator.exe -d etc...

但是,我在尝试将CMD与C#一起使用时相当新,所以我想知道我应该怎么做?目前我有这段代码:

Process p = new Process();
string args = "\"" + sonicannotatorpath + "\" -t \"" + transpath + "\" \"" + filepath + "\" -w csv --csv-force";
p.StartInfo = new ProcessStartInfo("cmd", args)
{
   RedirectStandardOutput = true,
   RedirectStandardInput = true,
   UseShellExecute = false,
   CreateNoWindow = true
};
p.Start();
p.StandardInput.WriteLine(args);
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine("DONE");
Console.Read(); 

上面的代码只执行我的CMD命令中的第二行...但由于.exe需要的文件已经在其默认位置,因此没有指定VAMP_PATH命令的问题。

我的问题是我不知道如何添加其他命令。我只需要复制p.StandardInput.WriteLine命令并只输入另一个命令作为参数吗?因为我读到这方面存在一些问题。

此外,我想问一下,因为没有p.StandardInput.WriteLine命令,并且只是使用ProcessStartInfo中的'args'参数,我的命令根本不执行(即使将\ c添加到args)。为什么你认为这是?

谢谢!

1 个答案:

答案 0 :(得分:2)

您不能从一个流程对象运行两个命令(实际上是两个流程),而不必先完成第一个流程。

运行第一个,调用p.WaitForExit();,然后构建并运行第二个。

要启动该过程,您不需要按照当前的方式将Arguments写入命令行。它应该按照你的方式工作。

p.StartInfo.Arguments = args;
p.StartInfo.FileName = "cmd";

可能适合您设置参数。