2015-06-04 95 views
2

考慮呼應傳遞給它的命令行參數的簡單的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 

如何檢索命令行參數而不將斜槓解釋爲轉義字符?

回答

5

System.Environment.CommandLine讓您可以訪問完整的非轉義命令行,並且您可以自由處理,無論您喜歡。

但是,除非你打算在你的應用中實現一個全面的解析器,這不會是一個可靠的方法,並且你不可能可靠地處理所有的拜占庭逃脫規則您的應用可能已被調用的各種shell cmd.exepowershell.exe不同逃逸的事情,這是依次從Cygwin的不同,等等等等

一個更好的選擇是,簡單地argv原樣,驗證它,你認爲合適(如File.Exists(argv.[0])或其他),並擺脫困境如果用戶搞砸了一些有用的錯誤信息。

+0

謝謝!關於各種shell中不同轉義行爲的好處 - 我只是在考慮'cmd.exe'。 – Daws