コンソールアプリケーションのためのいくつかのコマンドライン引数を読み込むしようとしています

StackOverflow https://stackoverflow.com/questions/1078172

質問

私はかなりシンプルな.NETコンソールアプリケーションを持っています。私はいくつかのコマンドライン引数に渡さないために...そこにタフな何もしたい。

さて、キッカーは、私は通常私は1つの引数のために、中に渡したい項目のリストを持っています。この場合、ファイルのリスト。私はこれを行うための最善の方法のかわからない。

eg. myapp.exe files=aaa.txt,bbb.txt,ccc.txt 

が、どのようなスペースを含むファイル名についてはどうですか?私はそれをdelimateコンマべきでしょうか?

物事を面白くするために、私は、私は二重引用符内のすべての引数のデータを置く必要があるかどうかわからないんだけど...、単一の値を受け入れ、他の引数を、持っている..

eg. myapp.exe files=aaa.txt,bbb.txt formatting=true foo=hello

または

eg myapp.exe files="aaa.txt","bbb.txt" formatting="true" foo="hello"
役に立ちましたか?

解決

おそらくプログラムのために少し遅れて、あなたが作業しているが、ここではあなたが Mono.Optionsを使用してそれを行うことができる方法です

static void Main(string[] args)
{
    //let's try this mono.options thing shall we?
    string xapfile = null;
    var files = new List<string>();
    var p = new Mono.Options.OptionSet()
    {
        { "xap=", v => xapfile =v },
        { "file:", v => files.Add(v)}
    };
    List<string> extra = p.Parse(args);


    Console.WriteLine(@"
    xap = '{0}', 
    file(s)= {1}", 
         xapfile, 
         string.Join(",", files.ToArray())
    );
    Console.WriteLine(@"
    left overs: {0}", 
        string.Join(Environment.NewLine, extra.ToArray())
    );
    // rest of your Main here

の構文を呼び出すとなります。

myapp.exe --file="file 1" --file="file 2" --file="file 3"

あなたも、全体のファイルは、変数見送るとちょうどファイルとして左オーバーを扱い、myapp.exe "file 1" "file 2" "file 3"のようにそれを呼び出すと、余分なリストからファイルを摘み取ることができます。

Mono.Optionsかなり強力です。あなたも使用する必要はありません - 、あなたが/file=-file=を使用することができます表示されます。

残念ながら、Windowsは(あなたがPowerShellコマンドレットにオプションを渡している場合を除き)あなたのためのglobを行いませんので、あなたはそれを自分で行う必要があります。これは、しかし非常に簡単です、ここでのコードのビットこのです私は*.fooまたは"c:\temp\*.bar|c:\temp\*.txt"を拡大するために、過去に使用しました。

あなたがトーキーにファイル名をラップしない限り、カンマがファイル名に有効であるとして

また、私はおそらく、リストを区切るカンマではないでしょう。それ以外の窓は、あなたが配管をやっていると考えて、あなたは1つがパイプが良い選択になります:-)一日あなたを噛まないように起こっていることを知っている、しかし、あなたはトーキーで式全体をラップしている場合のみ。ああ、コマンドライン処理の喜び - )

scroll top