C#でプログラム実行時のコマンドライン引数を取得するコードを紹介します。
System.Environment.CommandLine プロパティを利用すると、コマンドライン引数を含めた実行コマンドを取得できます。
コンソールアプリケーションの場合です。
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型で取得できます。
上記のコードを実行します。下図の結果が表示されます。実行ファイル名のフルパスと、コマンドラインの引数が表示されます。
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;
}
}
}
上記のコードを実行します。下図の結果が表示されます。実行ファイル名のフルパスと、コマンドラインの引数が表示されます。
先のコードにより、コマンドライン引数を取得できましたが、実行ファイル名とコマンドライン引数がまとめてstring型で取得されるため、個々のオプションを確認する場合は、文字列を加工する必要があります。System.Environment.GetCommandLineArgs() を利用すると、スペース区切りで個々のオプションを取得できるため、文字列の加工の手間を減らすことができます。
コンソールアプリの例です。
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]以降の要素にコマンドライン引数をスペース区切りした要素が格納されます。
プロジェクトを実行します。下図の画面が表示されます。[0]の要素に実行ファイル名のフルパスが格納されます。[1]以降の要素に コマンドライン引数がスペース区切りされた要素が格納されます。
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]);
}
}
}
}
プロジェクトを実行します。下図の画面が表示されます。[0]の要素には実行ファイル名のフルパスが格納され、[1]以降の要素にコマンドライン引数がスペース区切りされた要素が格納されます。
コンソールアプリケーションの場合は、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]の要素からコマンドライン引数が格納されていることが分かります。