VBScript実行時のコマンドライン引数を取得するには

VBScript

vbsファイルを実行する際に引数(パラメータ、設定値)を受け取ることができます。

コマンドライン引数を使用することで、スクリプトの実行時に外部からデータを渡し、そのデータに基づいて処理を行うことができます。

VBScriptファイルだけの動作ではないので知らない方は当記事でしっかり身につけていきましょう。

当記事では、初心者の方にもわかるようサンプルのコードと一緒にご紹介します。

コマンドライン引数の渡し方

以下の手順で引数を渡す例をご紹介します。

  • エクスプローラーを起動する
  • vbsファイルを作成する 例)C:\Users\[ユーザー名]\TEST\test.vbs
  • 作成したvbsファイルを選択し、右クリックから「ショートカットの作成」をクリックする
  • 作成したショートカットを選択し、右クリックから「プロパティ」をクリックし、ウィンドウを表示する
  • 表示されたウィンドウのリンク先に②で作成したファイルのフルパスの右端をクリックする
  • 「半角スペース + 渡したい設定値」を入力する リンク先の例)C:\Users\[ユーザー名]\TEST\test.vbs VBScript
  • 適用ボタンをクリックし、OKボタンをクリックする

引数を複数指定したい場合は、半角スペースで区切って設定します。

例)C:\Users\[ユーザー名]\TEST\test.vbs 引数1 引数2 引数3

コマンドライン引数の取得方法

VBScriptでコマンドライン引数を取得するには、WScript.Argumentsオブジェクトを使用します。

このオブジェクトは、引数の数や値にアクセスするためのメソッドを提供します。

ショートカットのプロパティのリンク先を「C:\Users\[ユーザー名]\TEST\test.vbs VBScript」にして、下記のコード内容を実行します。

'結果 → VBScript
MsgBox WScript.Arguments(0)

すると、「VBScript」というメッセージが表示され、指定した引数1を取得できたことを確認できます。

WScript.Arguments()の中は、何番目の引数かを指定します。

WScript.Arguments([要素番号 - 1])

リンク先で引数1のみ設定して、「WScript.Arguments(1)」で引数2を取得しようとすると、「インデックスが有効範囲にありません」とエラーが表示されます。

コマンドライン引数の種類

'リンク先の設定例
'C:\Users\[ユーザー名]\TEST\test.vbs /VBS:NameTest UnNameTest

すべての引数

すべての引数が対象となり、1番目の引数を取得します。

WScript.Argumentsの後に「.Item」を記述しても同様の結果を取得できます。

'結果1 → /VBS:NameTest
MsgBox WScript.Arguments(0)
MsgBox WScript.Arguments.Item(0)

名前付き引数

引数に「/[名前]:」が付けると、名前付き引数になります。

Namedプロパティのカッコで名前を指定することで「/[名前]:」の後の値を取得します。

名前を指定したけど存在しない場合は、空の文字(空白)を取得します。

同じ名前の名前付き引数が存在する場合は、若い番号の引数の値が取得されます。

'結果2 → NameTest
MsgBox WScript.Arguments.Named("VBS")
MsgBox WScript.Arguments.Named.Item("VBS")

'結果3 → 空白
MsgBox WScript.Arguments.Named("V")
MsgBox WScript.Arguments.Named.Item("V")

名前なし引数

引数に「/[名前]:」が付けないと、名前なし引数になります。

UnNamedプロパティのカッコで左から何番目に来るかを指定します。

1番目は「UnNamed(0)」で2番目は「UnNamed(1)」で指定します。

結果5は、2番目の名前なし引数が設定されていないため、エラーになります。

'結果4 → UnNameTest
MsgBox WScript.Arguments.UnNamed(0)
MsgBox WScript.Arguments.UnNamed.Item(0)

'結果5 → エラー(インデックスが有効範囲にありません)
MsgBox WScript.Arguments.UnNamed(1)
MsgBox WScript.Arguments.UnNamed.Item(1)

名前の存在有無チェック

下記のように名前付き引数に指定の名前が存在するかチェックすることができます。

'リンク先の設定例
'C:\Users\[ユーザー名]\TEST\test.vbs /VBS:NameTest UnNameTest

'結果1 → True
If WScript.Arguments.Named.Exists("VBS") Then
	'存在する
	MsgBox WScript.Arguments.Named("VBS")
Else
	'存在しない
End If

'結果2 → False
If WScript.Arguments.Named.Exists("V") Then
	'存在する
	MsgBox WScript.Arguments.Named("V")
Else
	'存在しない
End If

一番上のリンク先の設定例で設定した場合の結果です。

WScript.Arguments.Named(WshNamed)オブジェクトに対して「Exists」メソッドを使用することで引数にキーとなる名前が存在するかチェックすることができます。

WScript.Arguments.Named.Exists([キーとなる文字列])

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

引数の値をすべて取得するときは、「Arguments」プロパティを使用する。名前付き引数を取得するときは、「Named」プロパティを使用する。

名前なし引数を取得するときは、「UnNamed」プロパティを使用する。とお伝えしてきましたが、それぞれの引数の数を取得することができます。

'リンク先の設定例
'C:\Users\[ユーザー名]\TEST\test.vbs /VBS:NameTest UnNameTest /all:すべて

'結果1 → 3
MsgBox WScript.Arguments.Count

'結果2 → 2
MsgBox WScript.Arguments.Named.Count

'結果3 → 1
MsgBox WScript.Arguments.UnNamed.Count

「WshArguments」「WshNamed」「WshUnnamed」オブジェクトそれぞれに対して「Count」プロパティを使用することで引数の数を取得することができます。

結果1は、引数の「/VBS:NameTest」「UnNameTest」「/all:すべて」の3つが存在するため、3を返します。

結果2は、引数の「/VBS:NameTest」「/all:すべて」の2つが存在するため、2を返します。

結果3は、引数の「UnNameTest」の1つが存在するため、1を返します。

まとめ

VBScriptでコマンドライン引数を扱うことで、スクリプトの柔軟性が大幅に向上します。

引数の数や値を取得し、それに基づいて適切な処理を行うことが可能です。

基本的な引数の取得方法から複数の引数の処理、オプション引数の処理までを理解し、さまざまなシナリオでコマンドライン引数を効果的に利用しましょう。