考虑一个简单的F#控制台应用程序,它回应传递给它的命令行参数,每行一个命令:
[<EntryPoint>]
let main argv =
argv |> Array.iter (printfn "%s")
0
如果我将此程序传递给带有斜杠的目录路径,它会将斜杠视为转义字符,从而产生意外结果:
> app.exe "c:\some path\" "c:\another path"
c:\some path" c:\another
path
如何在不将斜杠解释为转义字符的情况下检索命令行参数?
答案 0 :(得分:5)
System.Environment.CommandLine
使您可以访问完整的非转义命令行,您可以随意处理它。
但除非你打算在你的应用程序中实现一个完整的解析器,否则这不是一个可靠的方法,并且你不太可能能够可靠地处理由所实现的所有拜占庭式转义规则。您的应用程序可能已被调用的所有各种shell。例如cmd.exe
以不同于powershell.exe
的方式逃避事物,而后者与Cygwin等不同。
更好的选择是简单地按argv
原样,按照您认为合适的方式验证(例如File.Exists(argv.[0])
或其他),如果用户搞砸了某些内容,请使用有用的错误消息进行挽救