技術情報
WScriptオブジェクト
このオブジェクトを用いると、
  • コマンドライン引数の設定及び取得
  • スクリプトファイル名の取得
  • バージョンの取得
  • COMオブジェクトの作成、接続、切断
  • スクリプトの実行停止
などのようなことが行えます。

プロパティ
  • AtEndOfLineプロパティ
  • 標準入力の行末状態を取得します。

    書式 WScript.StdIn.AtEndOfLine
    標準入力が行末に達したかどうかを返します。
    行末に達している場合は True、そうでない場合は False を返します。

    (例)
    '標準入力を取得します
    Dim StrInput
    StrInput = ""
    Do While WSCript.StdIn.AtEndOfLine = False
      StrInput = StrInput & WScript.StdIn.Read(1)
    Loop

  • AtEndOfStreamプロパティ
  • 標準入力の最後に達したかどうかを取得します。

    書式 WScript.StdIn.AtEndOfStream
    標準入力が最後に達したかどうかを返します。
    最後に達している場合は True、そうでない場合は False を返します。

    (例)
    '標準入力を取得します
    Dim StrInput
    StrInput = ""
    Do While WSCript.StdIn.AtEndOfStream = False
      StrInput = StrInput & WScript.StdIn.Read(1)
    Loop

  • Argumentsプロパティ
  • スクリプトへの引数の配列を取得します。

    書式 WScript.Arguments
    このプロパティの戻り値を変数に代入して、配列の各要素から引数を1つ1つ操作します。
    変数に代入する際には、Setステートメントが必要になります。

    (例)
    'スクリプトへの引数を1つずつ表示します
    Dim StrParam
    Set StrParam = WScript.Arguments
    For i = 0 to StrParam.Count - 1
      WScript.Echo StrParam(i)
    Next

  • BuildVersionプロパティ
  • WSHのビルドバージョン番号を取得します。

    書式 WScript.BuildVersion

    (例)
    'ビルドバージョンを表示します
    WScript.Echo WScript.BuildVersion

  • Columnプロパティ
  • 標準入力の現在の文字位置を取得します。

    書式 WScript.StdIn.Column

    (例)
    '標準入力を取得します
    Dim StrInput
    StrInput = ""
    Do While WSCript.StdIn.AtEndOfStream = False
    StrInput = StrInput & WScript.StdIn.Read(1)
    WScript.Echo WScript.StdIn.Column
    Loop

  • FullNameプロパティ
  • スクリプトエンジン(CScript.exeまたはWScript.exe)への絶対パスを取得します。

    書式 WScript.BuildVersion

    (例)
    'スクリプトエンジンの絶対パスを表示します
    WScript.Echo WScript.FullName

    '=====[実行結果]=====
    'C:\Windows\System32\WScript.exe
    '====================

  • Interactiveプロパティ
  • スクリプトモードを設定または取得します。

    書式 WScript.Interactive
    値は以下のいずれかを設定または取得します。
    説明
    True(既定) インタラクティブモードになります。ユーザとの対話機能が提供され、WSHへの入出力が有効になります。
    False バッチモードになります。ユーザとの対話機能は提供されず、WSHへの入出力は無効となります。

    (例)
    'スクリプトモードを表示します
    WScript.Echo WScript.Interactive

  • Lineプロパティ
  • 入出力の行番号を返します。

    書式 WScript.StdIn.Line
    WScript.StdOut.Line
    WScript.StdErr.Line

    (例)
    '標準入力を取得します
    Dim StrInput
    StrInput = ""
    Do While WSCript.StdIn.AtEndOfStream = False
    StrInput = StrInput & WScript.StdIn.Read(1)
    WScript.Echo WScript.StdIn.Line
    Loop

  • Nameプロパティ
  • WScriptオブジェクトの名前を取得します。

    書式 WScript.Name

    (例)
    'WScriptオブジェクトの名前を表示します
    WScript.Echo WScript.Name

    '=====[実行結果]=====
    '「Windows Script Host」と表示されます
    '====================

  • Pathプロパティ
  • スクリプトエンジンの格納先フォルダのパスを取得します。

    書式 WScript.Path

    (例)
    'スクリプトエンジンの格納先フォルダのパスを表示します
    WScript.Echo WScript.Path

    '=====[実行結果]=====
    'C:\Windows\System32
    '====================

  • ScriptFullNameプロパティ
  • 実行中のスクリプトファイルの絶対パスを取得します。

    書式 WScript.ScriptFullName

    (例)
    'スクリプトファイルの絶対パスを表示します
    WScript.Echo WScript.ScriptFullName

  • ScriptNameプロパティ
  • 実行中のスクリプトファイルのファイル名を取得します。

    書式 WScript.ScriptName
    スクリプトのファイル名のみとなります(パスは含まれません)。

    (例)
    'スクリプトファイル名を表示します
    WScript.Echo WScript.ScriptName

  • StdErrプロパティ
  • 標準エラー出力ストリームを取得します。

    書式 WScript.StdErr
    CScript.exeで実行中の場合にのみ、取得した標準エラー出力ストリームにアクセスできます。

    (例)
    '標準エラー出力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdErr

  • StdInプロパティ
  • 標準入力ストリームを取得します。

    書式 WScript.StdIn
    CScript.exeで実行中の場合にのみ、取得した標準入力ストリームにアクセスできます。

    (例)
    '標準入力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdIn

  • StdOutプロパティ
  • 標準出力ストリームを取得します。

    書式 WScript.StdOut
    CScript.exeで実行中の場合にのみ、取得した標準出力ストリームにアクセスできます。

    (例)
    '標準出力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdOut

  • Versionプロパティ
  • WSHのバージョンを取得します。

    書式 WScript.Version

    (例)
    'WSHのバージョンを表示します
    WScript.Echo WScript.Version


メソッド
  • Closeメソッド
  • テキストストリームを閉じます。

    書式 WScript.StdIn.Close()
    WScript.StdOut.Close()
    WScript.StdErr.Close()

    (例)
    '標準出力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdOut
    Obj.Write vbCrLf
    Obj.Close()

  • ConnectObjectメソッド
  • 指定したオブジェクトのイベントへアクセスします。

    書式 WScript.ConnectObject(引数1,引数2)
    ■ 引数1(必須)
    アクセスするオブジェクトを指定します。
    ■ 引数2(必須)
    アクセスするオブジェクトに実装されているイベント名のプリフィックス(サブルーチン名や関数名の先頭からの部分文字列)を指定します。

    [備考]
    このメソッドはオブジェクトのイベント発生を監視したい場合などに使用します。
    オブジェクトに実装されているイベント名と同じイベント名のサブルーチンをスクリプト側にも定義しておきます。
    引数1で指定したオブジェクトのイベントのうち、引数2で始まるイベント名のイベントがオブジェクト側で発生したとき、対応するスクリプト側のイベントも発生します。

    (例)
    'Wordドキュメントの終了を監視します
    '(Excelのワークブックに同じようなことをしても動作しないようです)
    Dim ObjWord, ObjDoc
    Set ObjWord = WScript.CreateObject("Word.Application")
    ObjWord.Visible = True
    'ドキュメントを追加します
    Set ObjDoc = ObjWord.Documents.Add()
    'ドキュメントの監視するイベントを指定します
    '"Document_Close"が監視されます
    WScript.ConnectObject ObjDoc, "Document_"

    '終了を待つ間無限ループにします
    Do While(1)
      WScript.Sleep 10
    Loop

    'Wordの「Document_Close()」イベントと同じサブルーチンを定義します
    Sub Document_Close()
    WScript.Echo "閉じます"
    Set ObjWord = Nothing
    Set ObjDoc = Nothing
    WScript.Quit()
    End Sub

  • CreateObjectメソッド
  • COMオブジェクトを作成します。

    書式 WScript.CreateObject(引数1,引数2)
    ■ 引数1(必須)
    プログラムID(ProgID)を表す文字列を指定します。
    (例)
    Excel Excel.Application
    Word Word.Application
    IE InternetExplorer.Application
    ■ 引数2
    関数のプレフィックスを指定します。
    この引数を指定することにより、ConnectObjectを使わずにオブジェクトのイベントを監視することができます。

    (例)
    'IEを起動します
    'プレフィックス「IE_」を指定して、
    'このプレフィックスが付いたイベントを監視します
    Dim ObjIE
    Set ObjIE = WScript.CreateObject("InternetExplorer.Application", "IE_")
    ObjIE.Visible = True

    '終了を待つ間無限ループにします
    Do While(1)
     &nbs;WScript.Sleep 10
    Loop

    '終了イベントを定義します
    Sub IE_OnQuit()
    WScript.Echo "終了"
    Set ObjIE = Nothing
    WScript.Quit()
    End Sub

  • DisconnectObjectメソッド
  • ConnectObjectで接続したイベントから切断します。

    書式 WScript.DisconnectObject(引数1)
    ■ 引数1(必須)
    切断するオブジェクトを指定します。

    (例)
    'Wordドキュメントの終了を監視します
    '(Excelのワークブックに同じようなことをしても動作しないようです)
    Dim ObjWord, ObjDoc, IntCount
    Set ObjWord = WScript.CreateObject("Word.Application")
    ObjWord.Visible = True
    'ドキュメントを追加します
    Set ObjDoc = ObjWord.Documents.Add()
    'ドキュメントの監視するイベントを指定します
    '"Document_Close"が監視されます
    WScript.ConnectObject ObjDoc, "Document_"

    '1000秒間だけイベントを監視します
    IntCount = 0
    Do While(1)
    WScript.Sleep 1000
    IntCount = IntCount + 1
    If IntCount >= 1000 Then
    '1000秒経過したので監視を中止します
    WScript.DisconnectObject ObjDoc
    Set ObjWord = Nothing
    Set ObjDoc = Nothing
    WScript.Quit()
    End If
    Loop

    'Wordの「Document_Close()」イベントと同じサブルーチンを定義します
    Sub Document_Close()
    WScript.Echo "閉じます"
    Set ObjWord = Nothing
    Set ObjDoc = Nothing
    WScript.Quit()
    End Sub

  • Echoメソッド
  • メッセージを表示します。

    書式 WScript.Echo(引数1, ...)
    ■ 引数1
    表示するメッセージ文字列を指定します。
    複数指定する場合は、「,」(カンマ区切)で指定します。
    未指定の場合は、空白行が表示されます。

    [備考]
    CScript.exeエンジンで実行した場合は、コンソールにメッセージを表示します。
    WScript.exeエンジンで実行した場合は、ダイアログボックスにメッセージを表示します。
    後者の場合、MsgBox関数を使うのと同じ働きとなります。

    (例)
    'メッセージを表示します
    WScript.Echo "テストです"

  • GetObjectメソッド
  • 既存のオブジェクトを取得します。

    書式 WScript.GetObject(引数1,引数2,引数3)
    ■ 引数1(必須)
    取得するオブジェクトを含んでいるファイルのパスを指定します。
    ■ 引数2
    プログラムID(ProgID)を指定します。
    引数1で指定したファイルの拡張子から対応するプログラムは判定されますので、通常この引数は指定しなくても構いません。
    同じ拡張子を扱う異なるアプリケーションがあるとき、アプリケーションを特定する必要がある場合には、この引数を指定します。
    ■ 引数3
    関数のプレフィックスを指定します。
    この引数を指定することにより、ConnectObjectを使わずにオブジェクトのイベントを監視することができます。

    (例)
    '既存のExcelファイルを開きます
    'D:\Temp\test.xlsが既にあるものとします
    Dim ObjExcel, ObjWorkbook
    Set ObjExcel = WScript.GetObject("D:\Temp\test.xls")
    'アプリケーションとワークブックを表示します
    ObjExcel.Application.Visible = true
    ObjExcel.Windows(1).Visible = true
    'アプリケーションがすぐに終了しないよう無限ループにします
    Do While(1)
      WScript.Sleep 100
    Loop

  • Quitメソッド
  • スクリプトの実行を終了します。

    書式 WScript.Quit(引数1)
    ■ 引数1
    エラーコードを指定します。
    未指定の場合は、エラーコード 0 として終了します。

    (例)
    'スクリプトの実行を終了します
    WScript.Quit()

  • Readメソッド
  • テキストストリームから文字を読み取ります。

    書式 WScript.StdIn.Read(引数1)
    ■ 引数1(必須)
    読み取る文字数を指定します。

    (例)
    '標準入力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdIn
    Do While Obj.AtEndOfStream = False
      WScript.Echo Obj.Read(1)
    Loop

  • ReadAllメソッド
  • テキストストリームから文字すべて読み取ります。

    書式 WScript.StdIn.ReadAll

    (例)
    '標準入力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdIn
    WScript.Echo Obj.ReadAll

  • ReadLineメソッド
  • テキストストリームから行単位で読み取ります。

    書式 WScript.StdIn.ReadLine

    (例)
    '標準入力ストリームを取得します
    Dim Obj
    Set Obj = WScript.StdIn
    Do While Obj.AtEndOfStream = False
      WScript.Echo Obj.ReadLine
    Loop

  • Sleepメソッド
  • スクリプトの実行を一時停止します。

    書式 WScript.Sleep(引数1)
    ■ 引数1(必須)
    停止秒数をミリ秒で指定します。

    [備考]
    一時停止中は使用していたCPUが開放されます。

    (例)
    '2秒間処理を停止します
    WScript.Sleep(2000)

  • Writeメソッド
  • テキストストリームへ文字を出力します。

    書式 WScript.StdOut.Write(引数1)
    WScript.StdErr.Write(引数1)
    ■ 引数1(必須)
    書き込む文字列を指定します。

    (例)
    '標準出力に書き込みます
    Dim Obj
    Set Obj = WScript.StdOut
    Obj.Write "1000" & vbCrLf

  • WriteBlankLinesメソッド
  • テキストストリームへ改行文字を出力します。
    空行が出力されることになります。

    書式 WScript.StdOut.WriteBlankLines(引数1)
    WScript.StdErr.WriteBlankLines(引数1)
    ■ 引数1(必須)
    出力する改行文字数を指定します。

    (例)
    '標準出力に書き込みます
    Dim Obj
    Set Obj = WScript.StdOut
    Obj.WriteBlankLines(5)

  • WriteLineメソッド
  • テキストストリームへ行単位で文字列を出力します。

    書式 WScript.StdOut.WriteLine(引数1)
    WScript.StdErr.WriteLine(引数1)
    ■ 引数1
    出力する文字列を指定します。
    文字列が出力されると、最後に常に改行文字を1つ自動的に出力します。
    未指定の場合は、WriteBlankLines(1)と等価になります。

    (例)
    '標準出力に書き込みます
    Dim Obj
    Set Obj = WScript.StdOut
    Obj.WriteLine("テストです")