我想从 C# 应用程序运行多个 CMD 命令。
cmd 上的命令类似于“C:\Users\Sara Mamdouh\Desktop\New folder> hvite -T 01 -C hcon.con -w net dict hmm_list Ann.wav”。
我的问题是如何从 C# 应用程序调用此命令并接收字符串中的结果?
首先,您应该将其写入bat
文件并将其另存为 like bat.bat
。
cd \
cd C:\Users\Sara Mamdouh\Desktop\New folder
exit
之后就可以使用Process.Start()
方法了。
通过指定应用程序的名称和一组命令行参数来启动进程资源,并将资源与新的进程组件相关联。
Process p = new Process();
ProcessStartInfo ps = new ProcessStartInfo();
ps.FileName = "path to bat.bat";
ps.RedirectStandardInput = true;
ps.RedirectStandardOutput = true;
ps.UseShellExecute = false;
p.StartInfo.Arguments = "hvite -T 01 -C hcon.con -w net dict hmm_list Ann.wav";
p.StartInfo = ps;
p.Start();
string output = p.StandardOutput.ReadToEnd();
阅读该课程的文档Process
。
由于C:\Users\Sara Mamdouh\Desktop\New folder>
您在控制台窗口中看到的信息输出可能不是您发出的命令的一部分,因此您需要将绝对路径名添加到命令中,以便可以找到文件:
var cmd = @"\"<path to hvite>\hvite\" -T 01 -C hcon.con -w net dict hmm_list \"C:\Users\Sara Mamdouh\Desktop\New folder\Ann.wav\"";
System.Diagnostics.Process.Start("CMD.exe", cmd);
Process.Start
如果您只需要启动一个进程,您可以使用该方法:
System.Diagnostics.Process.Start("cmd" "whatever parameters");
要阅读输出,请查看 MSDN 页面上的示例Process.StandardOutput
:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
基本上,您不只是调用 ,而是使用所需参数Process.Start
创建一个新对象,调用它,然后读取示例中的输出。Process
Start()
var cmd = @"hvite -T 01 -C hcon.con -w net dict hmm_list Ann.wav";
System.Diagnostics.Process.Start("CMD.exe", cmd);