[英]Cannot see the results of command line
以前有人问过如何在Visual Studio中运行C#中的命令行命令,而下面就是答案。
我尝试了同样的方法来调用一个名为cccc
的工具,它可以在命令行上运行。 但是,当我运行下面的代码时,我没有得到任何结果,没有任何错误。
一般说明我们如何从命令行中运行与C#相同的命令并获得相同的结果。 假设我在命令行上调用一个程序(它可以是能够在命令行上运行的任何程序,例如cccc,ccm等)并获得一些结果。 如何调用命令行并提供参数,以便它将调用cccc或其他任何内容并执行与没有C#时相同的操作。
string strCmdText;
strCmdText = "/C d: cd D:\\Exercises\\npp52\\PowerEditor\\src && dir /s /b | cccc - --outdir=d:\\myfolder";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);
在命令末尾添加“暂停”:
string strCmdText;
strCmdText = "/C d: cd D:\\Exercises\\npp52\\PowerEditor\\src && dir /s /b | cccc - --outdir=d:\\myfolder & pause";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);
或将控制台标准输出重定向到流。
这里需要更多魔法与OutputDataReceived处理程序
void Main()
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName="cmd.exe";
proc.StartInfo.Arguments = "/c ping 127.0.0.1";
proc.StartInfo.UseShellExecute = false;
proc.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
proc.BeginOutputReadLine();
proc.WaitForExit();
proc.Close();
}
private void SortOutputHandler(object sendingProcess,
DataReceivedEventArgs outLine)
{
if (!String.IsNullOrEmpty(outLine.Data))
{
// Do what You need with out
Console.WriteLine(outLine.Data);
}
}
您可以利用ProcessStartInfo类来更好地定义参数,而不是尝试将所有内容都放在字符串中
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "CMD.EXE";
psi.WorkingDirectory = "D:\\Exercises\\npp52\\PowerEditor\\src ";
psi.Arguments = "/C dir /s /b | cccc - --outdir=d:\\myfolder"";
psi.WindowStyle = ProcessWindowStyle.Normal;
Process.Start(psi);
此外,在命令窗口打开的情况下,您可以查看命令中是否存在语法错误
另一个问题是您没有使用RedirectStandardOutput
,因此丢弃输出。 看看这个答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.