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」にして、下記のコード内容を実行します。

'test.vbs - ショートカット
MsgBox WScript.Arguments(0) '結果 → VBScript

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

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

'Arguments プロパティ
WScript.Arguments([要素番号 - 1])

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

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

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

すべての引数

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

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

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

名前付き引数

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

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

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

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

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

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

名前なし引数

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

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

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

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

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

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

名前の存在有無チェック

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

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

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

'結果 → 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:すべて

'結果 → 3
MsgBox WScript.Arguments.Count

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

'結果 → 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の基本を確認するための演習問題を紹介します。以下の問題を解いて、VBScriptの理解を深めましょう。

演習1

引数が存在しない場合に「引数がありません」というメッセージを表示する処理を追加してください。

演習1 解答例
Dim args, i

Set args = WScript.Arguments

If args.Count = 0 Then
    WScript.Echo "引数がありません"
Else
    WScript.Echo "引数の数: " & args.Count
    For i = 0 To args.Count - 1
        WScript.Echo "引数" & i & ": " & args.Item(i)
    Next
End If

演習2

名前付き引数を使用して、ファイルのパスとモード(読み取り専用または書き込み可能)を指定し、それに応じたメッセージを表示するスクリプトを作成してください。

演習2 解答例
Dim namedArgs

Set namedArgs = WScript.Arguments.Named

If namedArgs.Exists("path") And namedArgs.Exists("mode") Then
    Dim mode
    mode = namedArgs.Item("mode")
    If mode = "read" Then
        WScript.Echo "ファイル " & namedArgs.Item("path") & " を読み取り専用モードで開きます。"
    ElseIf mode = "write" Then
        WScript.Echo "ファイル " & namedArgs.Item("path") & " を書き込みモードで開きます。"
    Else
        WScript.Echo "無効なモードが指定されました。"
    End If
Else
    WScript.Echo "PathとModeの両方の引数を指定してください。"
End If

まとめ

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

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

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