如何转义包含空格的路径
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路径