DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

起動時のコマンドライン引数を取得する

Environment.CommandLineを使用する方法

プログラム起動時のコマンドライン引数を取得するには、System.EnvironmentクラスのCommandLineプロパティを参照します。VB6のCommand関数(またはMainメソッドのパラメータからの取得)と違い、CommandLineプロパティはコマンドライン引数だけでなく、起動したプログラムのファイル名にコマンドライン引数がついたものを返すことに注意してください。

またコマンドライン引数を解析し、文字列の配列として取得するには、EnvironmentクラスのGetCommandLineArgsメソッドを使います。このときも配列の先頭(0番の要素)には起動したプログラムのファイル名が入ります。よって、GetCommandLineArgsメソッドが返す配列の大きさは、必ず1以上となります。

VB.NET
コードを隠すコードを選択
'コマンドライン引数の表示
Console.WriteLine(System.Environment.CommandLine)

'コマンドラインを配列で取得する
Dim cmds() As String
cmds = System.Environment.GetCommandLineArgs()
Dim cmd As String
For Each cmd In cmds
    Console.WriteLine(cmd)
Next
C#
コードを隠すコードを選択
//コマンドライン引数の表示
Console.WriteLine(System.Environment.CommandLine);

//コマンドラインを配列で取得する
string[] cmds;
cmds = System.Environment.GetCommandLineArgs();
//コマンドライン引数の表示
foreach (string cmd in cmds)
{
    Console.WriteLine(cmd);
}

上記のコードが"C:\VB TEST\VB.exe"に記述されており、"VB.exe"をコマンドライン引数に
"C:\VB TEST\1.bmp" "C:\VB TEST\2.bmp" "C:\VB TEST\3.bmp"
を指定して起動したとき、出力結果は以下のようになります。

"C:\VB TEST\VB.exe" "C:\VB TEST\1.bmp" "C:\VB TEST\2.bmp" "C:\VB TEST\3.bmp"
C:\VB TEST\VB.exe
C:\VB TEST\1.bmp
C:\VB TEST\2.bmp
C:\VB TEST\3.bmp

Mainメソッドのパラメータで取得する方法

さらに、プログラムのエントリポイントであるMainメソッドのパラメータからコマンドライン引数を取得することも出来ます。この時はEnvironmentクラスのGetCommandLineArgsメソッドと違い、配列の先頭に実行したプログラムファイル名が入ることはありません。なおエントリポイントについて詳しくは、こちらをご覧ください。

VB.NET
コードを隠すコードを選択
Private Sub Main(ByVal CmdArgs() As String)
    'コマンドライン引数の表示
    Dim cmd As String
    For Each cmd In CmdArgs
        Console.WriteLine(cmd)
    Next
End Sub
C#
コードを隠すコードを選択
static void Main(string[] args) 
{
    if (args.Length == 0)
    {
        Console.WriteLine("コマンドライン引数はありません。");
    }
    else
    {
        foreach (string arg in args)
            Console.WriteLine(arg);
    }
}

出力例は、以下のようになります。

C:\VB TEST\1.bmp
C:\VB TEST\2.bmp
C:\VB TEST\3.bmp

.NET Framework 2.0以降のVB.NETで、My.Application.CommandLineArgsを使用する方法

.NET Framework 2.0以降のVB.NETでは、My.Application.CommandLineArgsプロパティでコマンドライン引数を取得することも出来ます。この場合は「Mainメソッドのパラメータで取得する方法」と同様に、配列の先頭に実行したプログラムファイル名が入ることはありません。

VB.NET
コードを隠すコードを選択
'コマンドライン引数の表示
For Each cmd As String In My.Application.CommandLineArgs
    Console.WriteLine(cmd)
Next

出力例は、以下のようになります。

C:\VB TEST\1.bmp
C:\VB TEST\2.bmp
C:\VB TEST\3.bmp
  • 履歴:
  • 2007/2/7 My.Application.CommandLineArgsを使用する方法を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。