如何转义包含空格的路径

时间:2010-09-17 08:44:16

标签: c# escaping console-application command-line-arguments

要将带空格的路径传递给.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 个答案:

答案 0 :(得分:5)

我认为不可能,因为空格是CLI参数的分隔符,因此需要对它们进行转义。

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

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

答案 1 :(得分:4)

只引用每个参数。此...

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

...是一个完全有效的命令行,完全符合您的要求。