Gilja's logs of the struggles with programming

シン母駆け出しエンジニアの奮闘記

WScriptオブジェクトの利用

Theme

前回同様、VBScriptの学習を進めます

参考:

atmarkit.itmedia.co.jp

WScriptオブジェクトとは

WScriptオブジェクト

 cf.Errオブジェクト:VBScriptのオブジェクト

 VBScriptのオブジェクトは、IE上でも使用できる

  • DimやSetでオブジェクト宣言・代入は不要

  • WScript.<プロパティ/メソッド>の構文で使用

主なメソッド/プロパティ

プロパティ
情報グループ プロパティ 内容
WSH実行ファイルの情報 Name WSHの実行ファイル名
^ Path WSHの実行ファイルのあるフォルダ・パス
^ FullName Wshの実行ファイルパス
^ Version WSHのバージョン
スクリプトの情報 ScriptName スクリプトのファイル名
^ ScriptFullName スクリプトのフルパス
^ Interactive バッチモードorインタラクティブモード
^ TimeOut タイムアウトの秒数
^ Arguments コマンドライン引数の情報
標準入出力 StdIn 標準入力
^ StdOut 標準出力
^ StdErr 標準エラー出力
メソッド
処理グループ メソッド 内容
メッセージ表示 Echo メッセージを表示
スクリプト実行制御 Quit スクリプトの終了
^ Sleep スクリプトの一時停止
オブジェクトの取り扱い CreateObject オブジェクトの作成
^ ConnectObject オブジェクトに接続
^ DisconnectObject オブジェクトを切断
^ GetObject オブジェクトの取得

使用方法

VBScriptファイルの実行方法
  • GUI:wscript.exe ←既定

  • CUI:cscript.exe

★既定exeを変える方法

コマンド・プロンプト上

'既定をcscript.exeにする
cscript.exe //H:CScript

'既定をwscript.exeにする
cscript.exe //H:WScript

★コンソール出力する際の以下の文字列を表示しない方法

'出力したくない文字列
Microsoft(R) Windows Script Host Version 5.6
Copyright(C) Microsoft Corporation 1996-2001. All rights reserved.

'方法
cscript.exe //NoLogoオブション付与

Echoメソッドについて
wscript.exeで実行した場合(wscript.exe 〇〇.vbs)

Point VBScript の MsgBox と似た動作

  • メッセージウィンドウ表示
WScript.Echo "hoge"

hoge

  • 改行連結
WScript.Echo "hoge" & vbcrlf & "fuga"

hoge

fuga

  • 空白連結
WScript.Echo "hoge", "fuga"

hoge fuga

cscript.exeで実行した場合(cscript.exe 〇〇.vbs)

Point Debug.Print と似た動作

  • コンソール表示
WScript.Echo "hoge"

hoge
  • 自動で改行コード付与
'①②は同様の表示

'①
WScript.Echo "hoge" & vbcrlf & "fuga"
'②
WScript.Echo "hoge"
WScript.Echo "fuga"

hoge
fuga

Interactiveプロパティについて

スクリプトの実行モード

  • 対話モード:True ← デフォルト

  • バッチモード:False

★バッチモード(スクリプト実行中にエラーやEchoメソッドの表示がされないモード )で実行

cscript.exe //B <スクリプト・ファイル名>

TimOutプロパティについて

スクリプト実行できる最大時間(秒数)

既定値 0

'スクリプト実行が30秒を過ぎると停止(ダイアログも閉じる)
cscript.exe //T:30 <スクリプト・ファイル名>

Argumentsプロパティについて

WshArgumentsクラスのオブジェクトを返す

WshArgumentsオブジェクト(コレクション)に含まれる要素は

コマンドライン引数全体を空白記号で分割した文字列(String型)

WshArgumentsのプロパティ
  • Count : コマンドライン引数の数 //0=引数なし、1=引数1つ...

  • Item:既定なので省略化★For Each~Next 列挙可能

Point コマンドライン引数にはファイル自体も可能

GUI操作でExporler上でvbsファイルにtxtファイル等をドラッグアンドドロップし実行するとwscript.exeで実行される

  • Named/Unnamed:名前付き/名前なしの引数(コレクション)を返す

Point 名前付き/名前なしとは

Named→WshNamedコレクション

Unnamed→WshUnnamedコレクション

cscript.exe ShowParameter2.vbs /param1 /param2:value2 param3

'/param1 → 名前付き引数(値なし)
'/param2:value2 → 名前付き引数(値あり)
'/param3 → 名前なし引数
Option Explicit

'オブジェクト変数の宣言と代入
Dim objWshNamed, objWshUnnamed
Set objWshNamed = WScript.Arguments.Named
Set objWshUnnamed = WScript.Arguments.Unnamed

'名前付き引数の存在有無を確認
If objWshNamed.Exists("param1") Then
    WScript.Echo "名前付き引数/param1が指定されました。"
End If

'名前付き引数の存在有無を確認し、その値を表示
If objWshNamed.Exists("param2") Then
    WScript.Echo "名前付き引数/param2が指定されました。", _
                "その値は" & objWshNamed.Item("param2") & "です。"
End If

'名前なし引数の列挙
Dim intIndex
If objWshUnnamed.Count > 0 Then
    For intIndex = 0 To objWshUnnamed.Count - 1
        WScript.Echo "引数なし引数" & objWshUnnamed.Item(intIndex) & "が指定されました。"
    Next
End If

'オブジェクトの破棄
Set objWshNamed = Nothing
set objWshUnnamed = Nothing

Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

名前付き引数/param1が指定されました。
名前付き引数/param2が指定されました。 その値はvalue2です。
引数なし引数param3が指定されました。
PS C:\Users\***\***>

StdIn/StdOut/StdErrプロパティについて
概要
  • 標準入出力と標準エラー出力を表すTextStreamオブジェクトを返すプロパティ

  • ※cscript.exe(CUIWSH)でしか動作しない

使用用途

StdIn

  • InputBox関数を使わずにユーザに文字列を入力させたいとき

  • 入力値の文字数を指定数だけ取得 strFromStdIn = objStdIn.Read(5)

StdOut

  • コンソールにユーザのための情報を表示させるときに便利

  • cscript.exeで実行を強制させたいときに使用するとよい(wscript.exeではStdOutプロパティを参照しようとするとエラー)

  • Writeメソッドを用いると、改行を加えず文字列を表示する→プログレスバーを作成できる

その他

他のコンソールアプリケーションやファイル、デバイスと連携ができる(「リダイレクト」「パイプ」で検索してみよう)


Sleep/Quitメソッドについて
概要

スクリプトの実行制御をおこなう

Sleepの使用

WScript.Sleep 10000 10秒(ミリ秒単位)

待機の間、CPUを占有しない

待機の間、ほかのオブジェクトでイベントが発生した場合、そちらに処理が移る

イベント発生の待機として空ループを回すときに使用できる

Quitの使用

WScript.Quit() (数値)引数=エラーコード 省略時は0:正常終了

スクリプトを終了する


COMオブジェクトを扱うメソッドについて
メソッド
  • CreateObject 作成

  • ConnectObject 接続

  • DisconnectObject 切断

  • GetObject 取得

・・・続きは次回