如何转义包含空格的路径

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路径逃脱的地方.

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

ama*_*tar 6

我不认为这是可能的,因为空间是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)


Hei*_*nzi 5

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

myapp.exe "--path" "C:\Program Files\MyApp" "--flag"
Run Code Online (Sandbox Code Playgroud)

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