Pokud je potřeba zpracovat argumenty nějak inteligentně, existují různé knihovny. Níže je ale kus kódu, který řeší většinu problematiky. Už nevím, kde jsem ho vyštrachal 🙂
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace Some.Namespace { /// <summary> /// Arguments class /// </summary> public class Arguments { // Variables private StringDictionary Parameters; // Constructor public Arguments(string[] Args) { Parameters = new StringDictionary(); Regex Spliter = new Regex(@"^-{1,2}|^/|=|:", RegexOptions.IgnoreCase | RegexOptions.Compiled); Regex Remover = new Regex(@"^['""]?(.*?)['""]?$", RegexOptions.IgnoreCase | RegexOptions.Compiled); string Parameter = null; string[] Parts; // Valid parameters forms: // {-,/,--}param{ ,=,:}((",')value(",')) // Examples: // -param1 value1 --param2 /param3:"Test-:-work" // /param4=happy -param5 '--=nice=--' foreach (string Txt in Args) { // Look for new parameters (-,/ or --) and a // possible enclosed value (=,:) Parts = Spliter.Split(Txt, 3); switch (Parts.Length) { // Found a value (for the last parameter // found (space separator)) case 1: if (Parameter != null) { if (!Parameters.ContainsKey(Parameter)) { Parts[0] = Remover.Replace(Parts[0], "$1"); Parameters.Add(Parameter, Parts[0]); } Parameter = null; } // else Error: no parameter waiting for a value (skipped) break; // Found just a parameter case 2: // The last parameter is still waiting. // With no value, set it to true. if (Parameter != null) { if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true"); } Parameter = Parts[1]; break; // Parameter with enclosed value case 3: // The last parameter is still waiting. // With no value, set it to true. if (Parameter != null) { if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true"); } Parameter = Parts[1]; // Remove possible enclosing characters (",') if (!Parameters.ContainsKey(Parameter)) { Parts[2] = Remover.Replace(Parts[2], "$1"); Parameters.Add(Parameter, Parts[2]); } Parameter = null; break; } } // In case a parameter is still waiting if (Parameter != null) { if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true"); } } // Retrieve a parameter value if it exists // (overriding C# indexer property) public string this[string Param] { get { return (Parameters[Param]); } } public string GetParam(string Param, string DefaultValue) { if (this[Param] != null) return this[Param]; else return DefaultValue; } } } /*Příklad * * * // Command line parsing Arguments CommandLine=new Arguments(Args); // Look for specific arguments values and display // them if they exist (return null if they don't) if(CommandLine["param1"] != null) Console.WriteLine("Param1 value: " + CommandLine["param1"]); else Console.WriteLine("Param1 not defined !"); if(CommandLine["height"] != null) Console.WriteLine("Height value: " + CommandLine["height"]); else Console.WriteLine("Height not defined !"); if(CommandLine["width"] != null) Console.WriteLine("Width value: " + CommandLine["width"]); else Console.WriteLine("Width not defined !"); if(CommandLine["size"] != null) Console.WriteLine("Size value: " + CommandLine["size"]); else Console.WriteLine("Size not defined !"); if(CommandLine["debug"] != null) Console.WriteLine("Debug value: " + CommandLine["debug"]); else Console.WriteLine("Debug not defined !"); * * * */