Udostępnij za pośrednictwem


[VBScriptテクニック] スクリプトからのコマンド実行方法について

こんにちは、 ILM 一家のパパ(お父さん)です。
最近、ブログネタに日々悩んでいます。PowerShell について書きたいところですが仕込み中ですので、この間に VBScript を使用する上での汎用的に使用できそうな スクリプティング テクニックを、何回かに分けてお話しようと思います。

まず、初回は VBscript で他コマンドなど実行ファイルの起動方法についてお話しましょう。
VBscript の実行は 1つのスクリプト実行において、1プロセス 1スレッドで動作します。Sub プロシージャの記述は可能ですが、基本的に上位行から順次実行される形式であり、高度な処理、大量のジョブを実行するようなコードを記述すると、長文なスクリプトコードになる事が避けられません。

このような場合、特定のジョブ毎に スクリプトを個々に作成し、メインスクリプトから、多重起動、連続実行ができれば個々のスクリプトのメンテナンスコストを下げることが可能です。また、既存で存在するコマンドを流用するようなことも可能になります。

Windows Scripting Host (WSH) の WshShell  には、実行ファイルを起動するためのメソッドとして以下メソッドが用意されています。

<Run メソッド>
     特徴: WSH5.6 以前からというか、Basic 言語固有の実行ファイル起動のためのメソッド。
               Windows アプリケーションを実行する際に、表示状態(サイズ等)を操作が可能。
               同期/非同期 実行を制御可能。
     構文 : object .Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 
https://msdn.microsoft.com/ja-jp/library/cc364421.aspx

<Exec メソッド>
    特徴: WSH 5.6 以降より実行いただけます。
              WshScriptExec オブジェクトとして起動プロセスの情報取得が可能。
              基本的に非同期実行。ただし WshScriptExec オブジェクトの Status プロパティで実行判定が可能
              標準入出力を介した、呼び出し元スクリプトとの情報伝達が可能。
    構文 : object.Exec(strCommand)
https://msdn.microsoft.com/ja-jp/library/cc364356.aspx

Windows アプリケーションを起動するとかではなく、スクリプト連携や、コマンド実行を行うような場合であれば Execメソッドを使用されるのがよろしいかと思います。
実際に、Calc を起動し、終了待機するスクリプトを見ていただきましょう。

<VBScript例>
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("calc")
Do While oExec.Status = 0
     WScript.Sleep 100
Loop
WScript.Echo ”終了しました"

今回は、起動と終了確認までのご紹介とさせていただきます。
次回は、標準入出力を使用した、情報伝達方法と注意事項をご紹介したいと思います。

今月は、ういこ さんを超える数のブログ投稿してみたい
~ お父さんより ~