如何转义包含空格的路径

Posted

技术标签:

【中文标题】如何转义包含空格的路径【英文标题】:How to escape path containing spaces 【发布时间】:2011-04-13 15:03:58 【问题描述】:

要将带有空格的路径传递给 .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,路径放弃了它的转义。

如何使用通用解决方案解决它? (无需搜索需要手动转义和引用的每个参数的值)

【问题讨论】:

【参考方案1】:

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

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

public static string[] Escape(this string[] args)

    return args.Select(s => s.Contains(" ") ? string.Format("\"0\"", s) : s).ToArray();

【讨论】:

太棒了!谢谢!顺便说一句,我认为这里没有必要string[]IEnumerable<string> 套房【参考方案2】:

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

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

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

【讨论】:

Select(s => String.Format("\"0\"", s))。看起来不错,但我更喜欢 @amarsuperstar 的解决方案 :) 谢谢 Heinzi 在路径有尾随“\”例如“C:\Program Files\MyApp\”的情况下不起作用 @EdmundYeung99:是的,这是一个非常棘手的问题。以下问题包含解决该问题的一些尝试:***.com/q/5510343/87698

以上是关于如何转义包含空格的路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在命令行启动参数上转义文件路径中的空格

如何在命令行启动参数上转义文件路径中的空格

在一个qt项目中,如何在windows下添加路径包含空格的pro的include路径

在一个qt项目中,如何在windows下给pro添加include路径,路径包含空格

包含反斜杠的路径字符串无法识别的转义序列

Redis 如何设置包含空格的Value