2010-07-23 249 views
0

我見過人們編寫自定義類來更輕鬆地處理各種語言的命令行選項。我想知道,如果.NET(3.5或更低)有任何內置的,這樣你就不必定製解析之類的東西:解析C#中的命令行選項

myapp.exe文件複製=的text.txt

+0

喬恩,我同意 - 沒有看到這個問題在這裏張貼的答案之前。我會在那裏發佈我的回答(我很驚訝,沒有人提到過CSharpOptParse)。 – 2010-07-23 14:07:26

回答

0

編輯:

但也有人們已經建立,如解析器...

可以說是最好的了:C# Command Line Argument Parser

+0

我的意思是內置於框架,但謝謝。 – 2010-07-23 14:37:29

0

這是一個相當古老的帖子,但這裏是我設計並在我的所有控制檯應用程序中使用的東西。這只是一小段代碼,可以注入到單個文件中,一切都可以工作。

http://www.ananthonline.net/blog/dotnet/parsing-command-line-arguments-with-c-linq

編輯:這是現在市面上Nuget,並且是開源項目CodeBlocks的組成部分。

它被設計來以聲明和直觀地使用的,像這樣(另一使用示例here):

args.Process(
    // Usage here, called when no switches are found 
    () => Console.WriteLine("Usage is switch0:value switch:value switch2"), 

    // Declare switches and handlers here 
    // handlers can access fields from the enclosing class, so they can set up 
    // any state they need. 
    new CommandLine.Switch(
     "switch0", 
     val => Console.WriteLine("switch 0 with value {0}", string.Join(" ", val))), 
    new CommandLine.Switch(
     "switch1", 
     val => Console.WriteLine("switch 1 with value {0}", string.Join(" ", val)), "s1"), 
    new CommandLine.Switch(
     "switch2", 
     val => Console.WriteLine("switch 2 with value {0}", string.Join(" ", val)))); 
4

這裏是另一個可能的方法。非常簡單,但它在過去對我有用。

string[] args = {"/a:b", "/c:", "/d"}; 
Dictionary<string, string> retval = args.ToDictionary(
    k => k.Split(new char[] { ':' }, 2)[0].ToLower(), 
    v => v.Split(new char[] { ':' }, 2).Count() > 1 
             ? v.Split(new char[] { ':' }, 2)[1] 
             : null); 
0

如果你不喜歡使用圖書館和簡單的東西是不夠好,你可以這樣做:

string[] args = Environment.GetCommandLineArgs().Skip(1).ToArray(); 
Func<string, string> lookupFunc = 
    option => args.Where(s => s.StartsWith(option)).Select(s => s.Substring(option.Length)).FirstOrDefault(); 

string myOption = lookupFunc("myOption="); 

;

0

爲了快速和骯髒的事業,你不需要任何複雜的,很多時候一個控制檯應用程序採取的形式的命令行:

program.exe command -option1 optionparameter option2 optionparameter 

如果是這樣的話,獲得「命令」,只是用args[0]

爲了得到一個選項,使用這樣的事情:

var outputFile = GetArgument(args, "-o"); 

GetArgument被定義爲:

string GetArgument(IEnumerable<string> args, string option) 
    => args.SkipWhile(i => i != option).Skip(1).Take(1).FirstOrDefault();