Parsing command-line options in C#
本问题已经有最佳答案,请猛点这里访问。
我见过有人编写自定义类来更容易地处理各种语言的命令行选项。我想知道.NET(3.5或更低版本)是否内置了任何内容,这样您就不必自定义分析以下内容:
myapp.exe file=text.txt
这是另一种可能的方法。很简单,但过去对我很有用。
1 2 3 4 5 6 |
对于不需要任何复杂功能的快速和肮脏实用程序,控制台应用程序经常采用以下形式的命令行:
1 | program.exe command -option1 optionparameter option2 optionparameter |
等。
如果是这样的话,要得到"命令",只需使用
要获得选项,请使用如下内容:
1 | var outputFile = GetArgument(args,"-o"); |
其中,
1 2 | string GetArgument(IEnumerable<string> args, string option) => args.SkipWhile(i => i != option).Skip(1).Take(1).FirstOrDefault(); |
如果您不喜欢使用库,并且简单的东西足够好,您可以这样做:
1 2 3 4 5 | 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="); |
;
这是一篇相当古老的文章,但这里是我在所有控制台应用程序中设计和使用的。它只是一小段代码,可以注入到一个文件中,一切都会正常工作。
http://www.ananthonline.net/blog/dotnet/parsing-command-line-arguments-with-c-linq
编辑:这现在在nuget上可用,并且是开源项目代码块的一部分。
它被设计成以声明和直观的方式使用,就像这样(这里的另一个用法示例):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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)))); |
编辑:没有。
但是有一些解析器是人们建造的,比如…
可以说是最好的:C命令行参数分析器