command-line - 如何忽略命令行参数中的转义字符?

标签 command-line f#

考虑一个简单的 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

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

最佳答案

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

但是除非您计划在您的应用程序中实现一个成熟的解析器,否则这将不是一个可靠的方法,并且您不太可能能够可靠地处理所有各种实现的拜占庭转义规则您的应用程序的外壳可能已被调用。例如cmd.exepowershell.exe 的转义方式不同,而 powershell.exe 又与 Cygwin 等不同。

更好的选择是简单地按原样使用 argv,按照您认为合适的方式验证它(例如 File.Exists(argv.[0]) 或其他) ,如果用户搞砸了,可以通过有用的错误消息来解决问题。

关于command-line - 如何忽略命令行参数中的转义字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30653760/

相关文章:

scala - 为什么棱镜设置函数不返回选项/也许

visual-studio - 如何在 Visual Studio 中出现错误波形时显示类型信息 [fsharp]

f# - 令人困惑的 F# 编译器消息

linux命令查找包含特定单词的文件

linq - 编译 LINQ 表达式

linux - 找不到 debian linux gvfs-copy 命令

python - 将空字符串传递给 argparse

f# - 使用Mono Debug扩展在VSCode中调试F#控制台应用程序时不会出现断点

windows - Windows上的递归移动命令

python - 如何在 Windows 命令行中运行 .py 文件?