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 メソッドを使うでした。