要将带空格的路径传递给.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
,其中路径会丢弃其转义。
如何使用通用解决方案解决问题? (不搜索每个参数的值,需要转义并手动引用)
答案 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"
...是一个完全有效的命令行,完全符合您的要求。