static string savePath; // = @"i:\totori_cs2\";//保存先パス #endregion Fields #region Methods //********************************************************************************************** /// http://nanoappli.com/blog/archives/1281 /// <summary>起動引数を取得する /// </summary> /// <param name="mws"></param> //********************************************************************************************** private static CommandLine getParam(String[] args) { Options optdef; //--------------------------------------------------------- // オプションの定義を行う(optName, hasArg, description) //--------------------------------------------------------- optdef = new Options(); optdef.AddOption("word", true, "Search word"); optdef.AddOption("dest", true, "Destination path"); optdef.AddOption("page", true, "Page count"); optdef.AddOption("engine", true, "Search engine select"); optdef.AddOption("verbose", false, "Log print flag"); //--------------------------------------------------------- // コマンドラインオプションを解析する //--------------------------------------------------------- OptionParser parser = new OptionParser(); return parser.parse(optdef, args); }
//********************************************************************* /// <summary> 指定されたパラメータを解析する /// </summary> /// <param name="opts"> パラメータの定義</param> /// <param name="args"> 渡されたパラメータ値</param> /// /// <returns> 解析後のパラメータ情報</returns> //********************************************************************* public CommandLine parse( Options opts, String[] args ) { CommandLine cl = new CommandLine(); //--------------------------- // 解析の元ネタを覚えておく //--------------------------- cl.RawArgs = args; cl.Options = opts; //------------------------------------------- // 全てのパラメータを解析するまで繰り返し //------------------------------------------- for ( int loop = 0; loop < args.Length; loop++ ) { String arg = args[ loop ]; if ( arg.Equals( "/" ) ) { // スラッシュだけの場合は、値をみなす cl.addParam( "", arg ); continue; } if ( arg.StartsWith( "/" ) ) { // パラメータキーを取得 String key = arg.Substring( 1 ); if ( !opts.HasOption( key ) ) { //------------------------------------------------------------------ // キーとして定義されていない場合 -> スラッシュから始まる値とみなす //------------------------------------------------------------------ cl.addParam( "", arg ); continue; } if ( !opts.GetOption( key ).HasArg ) { //------------------------------------------------------------------ // キーとして定義されているが、値を持たない場合 -> flagを立てる //------------------------------------------------------------------ cl.addParam( key, "true" ); continue; } //------------------------------------------------------------ // キーとして定義され,値を持つ場合 -> キーと値をペアで覚える //------------------------------------------------------------ String value = loop+1 == args.Length ? "" : args[loop+1]; cl.addParam( key, value ); loop++; // valueの分、1件先食いしたのでインクリメントする continue; } //------------------------------------------------ // そもそもスラッシュから始まらない -> 値とみなす //------------------------------------------------ cl.addParam( "", arg ); } //--------------------------- // 解析したパラメータを返す //--------------------------- return cl; }