プログラム実行時のコマンドライン引数を取得する

C#でプログラム実行時のコマンドライン引数を取得するコードを紹介します。

System.Environment.CommandLine を利用する

System.Environment.CommandLine プロパティを利用すると、コマンドライン引数を含めた実行コマンドを取得できます。

コード1

コンソールアプリケーションの場合です。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CommandLineArgsString
{
  class Program
  {
    static void Main(string[] args)
    {
      string CommandStr = System.Environment.CommandLine;
      Console.WriteLine("CommandLine : {0}", CommandStr);
      Console.ReadLine();
    }
  }
}

解説

System.Environment.CommandLine プロパティにより、実行ファイル名のフルパスとコマンドラインの引数をstring型で取得できます。

実行結果1

上記のコードを実行します。下図の結果が表示されます。実行ファイル名のフルパスと、コマンドラインの引数が表示されます。

コード2

Windows Formアプリケーションの場合の例です。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CommandLineArgsWinForm
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void FormMain_Load(object sender, EventArgs e)
    {
      string CommandStr = System.Environment.CommandLine;
      textBox1.Text = CommandStr;
      
    }
  }
}

実行結果2

上記のコードを実行します。下図の結果が表示されます。実行ファイル名のフルパスと、コマンドラインの引数が表示されます。

System.Environment.GetCommandLineArgs() を利用する

先のコードにより、コマンドライン引数を取得できましたが、実行ファイル名とコマンドライン引数がまとめてstring型で取得されるため、個々のオプションを確認する場合は、文字列を加工する必要があります。System.Environment.GetCommandLineArgs() を利用すると、スペース区切りで個々のオプションを取得できるため、文字列の加工の手間を減らすことができます。

コード1

コンソールアプリの例です。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplicationParameter
{
  class Program
  {
    static void Main(string[] args)
    {
      string[] Commands = System.Environment.GetCommandLineArgs();

      for (int i = 0; i < Commands.Length; i++) {
        Console.WriteLine("command : {0:d} : {1}\r\n", i, Commands[i]);
      }

      Console.ReadLine();
    }
  }
}

解説

System.Environment.GetCommandLineArgs() メソッドにより、コマンドライン引数を取得します。取得した引数はstring型の配列となっており、[0]の要素に実行ファイル名、[1]以降の要素にコマンドライン引数をスペース区切りした要素が格納されます。

実行結果1

プロジェクトを実行します。下図の画面が表示されます。[0]の要素に実行ファイル名のフルパスが格納されます。[1]以降の要素に コマンドライン引数がスペース区切りされた要素が格納されます。

コード2

Windows Formの場合の例です。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CommandLineArgsWinForm
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void FormMain_Load(object sender, EventArgs e)
    {
      string[] Commands = System.Environment.GetCommandLineArgs();

      for (int i = 0; i < Commands.Length; i++) {
        textBox1.Text += string.Format("command : {0:d} : {1}\r\n", i, Commands[i]);
      }
    }
  }
}

実行結果2

プロジェクトを実行します。下図の画面が表示されます。[0]の要素には実行ファイル名のフルパスが格納され、[1]以降の要素にコマンドライン引数がスペース区切りされた要素が格納されます。

Main 関数の引数を利用する

コンソールアプリケーションの場合は、Main関数の引数を利用してコマンドライン引数を取得できます。

コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CommandLineArgsMain
{
  class Program
  {
    static void Main(string[] args)
    {
      for (int i = 0; i < args.Length; i++) {
        Console.WriteLine("command : {0:d} : {1}\r\n", i, args[i]);
      }
      Console.ReadLine();

    }
  }
}

解説

Main関数のargs引数に、スペース区切りされたコマンドライン引数の要素が格納されています。System.Environment.GetCommandLineArgs() メソッドでは[0]の要素には実行ファイル名のフルパスが格納されますが、Main関数のargs引数の場合は、実行ファイル名は格納されず、コマンドライン引数のみが格納されています。

実行結果

プロジェクトを実行します。下図の画面が表示されます。[0]の要素からコマンドライン引数が格納されていることが分かります。

補足
Visual Studioでデバッグ時に、コマンドライン引数を指定する方法はこちらの記事を参照してください。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2016-04-18
iPentec all rights reserverd.