通过.NET运行cmd命令?

时间:2009-03-27 22:41:13

标签: c# .net process cmd

System.Diagnostics.Process proc0 = new System.Diagnostics.Process();
proc0.StartInfo.FileName = "cmd";
proc0.StartInfo.WorkingDirectory = Path.Combine(curpath, "snd");
proc0.StartInfo.Arguments = omgwut;

现在有些背景......

string curpath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

omgwut是这样的:

  

copy / b a.wav + b.wav + ... + y.wav + z.wav output.wav

根本没有任何事情发生。显然有些不对劲。我也尝试“复制”作为可执行文件,但这不起作用。

4 个答案:

答案 0 :(得分:16)

尝试使用/C 为cmd添加前缀,有效地说cmd /C copy /b t.wav ...

根据cmd.exe /?使用

/C <command>

  

执行指定的命令   字符串然后终止

对于您的代码,它可能看起来像

// .. 
proc0.StartInfo.Arguments = "/C " + omgwut;

备注:

  • 测试命令是否正常工作的一个好方法是从命令提示符实际尝试它。如果您尝试cmd.exe copy ...,您会看到副本没有发生。
  • 您可以作为参数传递的参数长度有限制。来自MSDN:“.NET Framework应用程序中的最大字符串长度为2,003个字符,.NET Compact Framework应用程序中为488个字符。”
  • 您可以通过使用System.IO类打开文件并手动连接它们来绕过shelling out命令。

答案 1 :(得分:4)

试试这可能对你有帮助..它使用我的代码。

System.Diagnostics.ProcessStartInfo procStartInfo =
    new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);

// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
string result = proc.StandardOutput.ReadToEnd();
// Display the command output.
Console.WriteLine(result);
  }
  catch (Exception objException)
  {
  // Log the exception
  }

答案 2 :(得分:1)

即使你可以尝试这个......这更好。

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 

proc.EnableRaisingEvents=false;
proc.StartInfo.FileName="iexplore";
proc.StartInfo.Arguments="http://www.microsoft.com";

proc.Start();

proc.WaitForExit();

MessageBox.Show("You have just visited " + proc.StartInfo.Arguments);

答案 3 :(得分:0)

Daniels cmd / c的想法会起作用。请记住,在您的情况下,命令行的长度可能只有8k,有关详细信息,请参阅this

因为你在.Net应用程序中,File.Copy可能比这种方法更容易/更清洁。