在路径中使用带参数和空格的Process.Start

我见过类似的例子,但找不到与我的问题完全相同的东西。

我需要从C#运行这样的命令:

C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe p1=hardCodedv1 p2=v2 

我在运行时设置v2,所以我需要能够在调用Process.Start之前修改C#中的字符串。 有谁知道如何处理这个,因为我的参数之间有空格?

您可以使用ProcessStartInfo类来分隔您的参数,FileName,WorkingDirectory和参数,而无需担心空格

 string fullPath = @"C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe" ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = Path.GetFileName(fullPath); psi.WorkingDirectory = Path.GetDirectoryName(fullPath); psi.Arguments = "p1=hardCodedv1 p2=" + MakeParameter(); Process.Start(psi); 

其中MakeParameter是一个函数,它返回用于p2参数的字符串

即使您使用ProcessStartInfo类,如果您必须为参数添加空格,那么上述答案将无法解决问题。 有一个简单的解决方案。 只需在参数周围添加引号。 就这样。

  string fileName = @"D:\Company Accounts\Auditing Sep-2014 Reports.xlsx"; System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.FileName = "Excel.exe"; startInfo.Arguments = "\"" + fileName + "\""; System.Diagnostics.Process.Start(startInfo); 

在这里,我添加了围绕文件名的转义引号,它可以工作。

试试这个

 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.FileName = "\"C:\\FOLDER\\folder with spaces\\OTHER_FOLDER\\executable.exe\""; startInfo.Arguments = "p1=hardCodedv1 p2=v2"; Process.Start(startInfo); 

在查看提供的其他解决方案之后,我遇到了所有我的各种参数被捆绑到一个参数中的问题。

"-setting0=arg0 --subsetting0=arg1"

所以我建议如下:

  ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "\"" + Prefs.CaptureLocation.FullName + "\""; psi.Arguments = String.Format("-setting0={0} --subsetting0={1}", "\"" + arg0 + "\"", "\"" + arg1+ "\""); Process.Start(psi); 

使用每个参数周围的引号,而不是围绕整个参数集。 正如Red_Shadow所指出的,这一切都可以通过单行来完成

  Process.Start("\"" + filename + "\"", arguments here)