如何在命令行参数中忽略转义字符?

Daw*_*aws 2 f# command-line

考虑一个简单的F#控制台应用程序,它回应传递给它的命令行参数,每行一个命令:

[<EntryPoint>]
let main argv = 
    argv |> Array.iter (printfn "%s")
    0
Run Code Online (Sandbox Code Playgroud)

如果我将此程序传递给带有斜杠的目录路径,它会将斜杠视为转义字符,从而产生意外结果:

> app.exe "c:\some path\" "c:\another path"
c:\some path" c:\another
path
Run Code Online (Sandbox Code Playgroud)

如何在不将斜杠解释为转义字符的情况下检索命令行参数?

lat*_*kin 5

System.Environment.CommandLine 使您可以访问完整的非转义命令行,您可以随意处理它.

但除非你打算在你的应用程序中实现一个完整的解析器,否则这不是一个可靠的方法,并且你不太可能能够可靠地处理你的应用程序的所有各种shell实现的所有拜占庭转义规则可能已被调用过.例如,以cmd.exe不同的方式逃避事物powershell.exe,这与Cygwin等不同.

一个更好的选择是简单地argv按原样,按照你认为合适的方式验证它(例如File.Exists(argv.[0])或者其他什么),如果用户弄乱了某些东西,就用一个有用的错误信息进行拯救.