[英]Canonical solution for escaping .NET command line arguments
問題 :給定文件名和任意字符串列表,是否有一種規范的方法來創建單個命令行,使得Environment.GetCommandLineArgs (和C#的void main(String[] args)
/ VB的Sub Main(args() As String)
)將返回相同的字符串列表?
背景 :.NET將命令行拆分為參數的方式非常復雜 ,例如:
如果雙引號跟隨兩個或偶數個反斜杠,則每個前進的反斜杠對將替換為一個反斜杠,並刪除雙引號。 如果雙引號跟隨奇數個反斜杠(包括只有一個),則每個前一對用一個反斜杠替換,剩下的反斜杠被刪除; 但是,在這種情況下,雙引號不會被刪除。
許多人嘗試簡單的“將每個參數放在雙引號中並轉義現有的雙引號”方法,並且只要其中一個參數包含一個尾部反斜杠就會失敗。 有關此問題的StackOverflow存在各種問題,例如:
然而,他們的答案要么不夠通用,不能為所有案例提供規范解決方案,要么似乎是“迭代地”開發(“哦,還有一個我忘了的特殊情況,讓我們添加它, 現在它應該覆蓋大多數情況...... “)。 由於這是一個非常常見的問題,我希望看到一個解決方案,例如,通過其中任何一個提供信心
此算法是通用的,來自相對權威的來源(MSDN博客)。
幾年前,微軟宣布他們將在CodePlex上發布一個命令行解析器(而不是應該隨.NET Framework 4一起提供的System.Shell.CommandLine)。 我不確定他們是否真的這樣做過。 如果您希望Microsoft員工開發的解析器可以查看cmdline 。 您還可以在CodePlex中查找命令行解析。
您也可以嘗試Mono.Options ,它非常強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.