我見過人們編寫自定義類來更輕鬆地處理各種語言的命令行選項。我想知道,如果.NET(3.5或更低)有任何內置的,這樣你就不必定製解析之類的東西:解析C#中的命令行選項
myapp.exe文件複製=的text.txt
我見過人們編寫自定義類來更輕鬆地處理各種語言的命令行選項。我想知道,如果.NET(3.5或更低)有任何內置的,這樣你就不必定製解析之類的東西:解析C#中的命令行選項
myapp.exe文件複製=的text.txt
我的意思是內置於框架,但謝謝。 – 2010-07-23 14:37:29
這是一個相當古老的帖子,但這裏是我設計並在我的所有控制檯應用程序中使用的東西。這只是一小段代碼,可以注入到單個文件中,一切都可以工作。
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))));
這裏是另一個可能的方法。非常簡單,但它在過去對我有用。
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);
上帝請所有隻使用Mono.Options!
如果你不喜歡使用圖書館和簡單的東西是不夠好,你可以這樣做:
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=");
;
爲了快速和骯髒的事業,你不需要任何複雜的,很多時候一個控制檯應用程序採取的形式的命令行:
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();
喬恩,我同意 - 沒有看到這個問題在這裏張貼的答案之前。我會在那裏發佈我的回答(我很驚訝,沒有人提到過CSharpOptParse)。 – 2010-07-23 14:07:26