aba*_*hev 10 c# escaping console-application command-line-arguments
要将带空格的路径传递给.NET控制台应用程序,您应该将其转义.可能没有逃脱,但用双引号括起来:
myapp.exe --path C:\Program Files\MyApp`
Run Code Online (Sandbox Code Playgroud)
变
new string[] { "--path", "C:\Program", "Files\MyApp" }
Run Code Online (Sandbox Code Playgroud)
但
myapp.exe --path "C:\Program Files\MyApp"
Run Code Online (Sandbox Code Playgroud)
变
new string[] { "--path", "C:\Program Files\MyApp" }
Run Code Online (Sandbox Code Playgroud)
它工作正常,你可以很容易地解析它.
我想扩展一个带有附加参数的参数集,并使用生成的参数集启动一个新进程:
new ProcessStartInfo(
Assembly.GetEntryAssembly().Location,
String.Join(" ", Enumerable.Concat(args, new[] { "--flag" })))
Run Code Online (Sandbox Code Playgroud)
这成为myapp.exe --path C:\Program Files\MyApp --flag路径逃脱的地方.
如何使用通用解决方案解决它?(不搜索每个参数的值,需要转义并手动引用)
我不认为这是可能的,因为空间是CLI参数的分隔符,因此它们需要被转义.
你可以很好地将它提取到扩展方法中,这样你就可以args.Escape()在上面的代码中运行了.
public static string[] Escape(this string[] args)
{
return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray();
}
Run Code Online (Sandbox Code Playgroud)
只需引用每个参数。这个...
myapp.exe "--path" "C:\Program Files\MyApp" "--flag"
Run Code Online (Sandbox Code Playgroud)
...是一个完全有效的命令行,并且完全符合您的要求。
| 归档时间: |
|
| 查看次数: |
11421 次 |
| 最近记录: |