VB.Net: Visual Basic でコマンドラインを読み取る

RadikoPad_cmd.exe のような自作のコマンドラインプログラムを起動するとき、コマンドに続いてパラメータを与えるのが普通です。

RadikoPad_cmd の場合は、放送局ID、録音開始時刻、録音終了時刻を与えます。

radikopad_cmd.exe TBS 20221120+13:00 20221120+13:30

のような感じ。では、コマンドに続くパラメータをどうプログラムに取り込めばいいのか?

今回も、https://dobon.net/vb の情報に助けてもらいました

System.Environment.GetCommandLineArgs に、コマンドライン情報が入っているので、この内容を解析して取り出せばよいようです。

では、サンプル。Imports System しているので、Environment前の Systemは省略可。

Imports System

Module Program
    Sub Main(args As String())
        Dim cmds As String() = Environment.GetCommandLineArgs()
        For Each para In cmds
            Console.WriteLine(para)
            'ここに、コマンドパラメータを直接処理するか、一度変数に取り込むか。
            '変数に取り込む場合、変数定義をforループの外で行うこと。
        Next
    End Sub
End Module

結果

C:\Users\sample\source\repos\memo1\memo1\bin\Debug\netcoreapp3.1\memo1.dll
TBS
20221120+11:00
20221120+11:55

一行目が、コマンド本体フルパス。これをさらに処理すると、ワーキングディレクトリがわかる。
二行目が引数1
三行目が引数2
四行目が引数4

引数が増えた場合は、5,6,7行目と続きます。

もし、コマンドライン引数を「-c config -s -q /output sample.txt」こんな感じで、オプションマークをハイフン – にしたり、スラッシュ / にした組み合わせの場合はどうなるのか?

実行結果は、以下の通りで、単純にスペースを区切りとして、その間の文字を取り込むだけです。

C:\Users\sample\source\repos\memo1\memo1\bin\Debug\netcoreapp3.1\memo1.dll
-c
config
-s
-q
/output
sample.txt

ですので、オプション記号 -s や /c などに続いてパラメータがある場合や、-q でパラメータを持たないもの、/output のようにロング形式オプションであっても特に区別ありません。それをオプションとして認識するかどうかはVisual Studio は関知せず、すべてプログラム処理の仕方の問題ということがわかります。

今回は、Visual Basic は、どうやって元のコマンドとオプションをプログラムの中から知るのかについてのメモで、

答えは、system.environment.getCommandLineArgs メソッドを使うでした。

コメントを残す