代码之家  ›  专栏  ›  技术社区  ›  abatishchev Karl Johan

如何转义包含空格的路径

  •  10
  • abatishchev Karl Johan  · 技术社区  · 14 年前

    若要将带有空格的路径传递给.NET控制台应用程序,应将其转义。可能不是转义,而是用双引号括起来:

    myapp.exe --path C:\Program Files\MyApp`
    

    变成

    new string[] { "--path", "C:\Program", "Files\MyApp" }
    

    但是

    myapp.exe --path "C:\Program Files\MyApp"
    

    变成

    new string[] { "--path", "C:\Program Files\MyApp" }
    

    它工作得很好,你可以很容易地解析它。

    我想扩展用加法给定的参数集,并用结果集参数开始新的过程:

    new ProcessStartInfo(
        Assembly.GetEntryAssembly().Location,
        String.Join(" ", Enumerable.Concat(args, new[] { "--flag" })))
    

    这就变成了 myapp.exe --path C:\Program Files\MyApp --flag 在那条路的尽头。

    如何用通用的解决方案来解决这个问题?(无需搜索每个需要转义的参数值并手动引用)

    2 回复  |  直到 14 年前
        1
  •  5
  •   amarsuperstar    14 年前

    我认为这是不可能的,因为空间是cli参数的分隔符,所以需要对它们进行转义。

    您可以很好地将它提取到一个扩展方法中,这样您就可以运行 args.Escape() 在上面的代码中。

    public static string[] Escape(this string[] args)
    {
        return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray();
    }
    
        2
  •  4
  •   Heinzi    14 年前

    只需引用每个参数。这个…

    myapp.exe "--path" "C:\Program Files\MyApp" "--flag"
    

    …是一个完全有效的命令行,完全按照您的要求执行。