VBScript-外部コマンドを実行する

VBSから外部コマンドを実行する。

WshShellを利用する。

VBScriptからコマンド実行するには、WshShellクラスのrunメソッドかexecメソッドを使用します。


runメソッドとexecメソッドの違い

runメソッドとexecメソッドの違いは以下の通りです。

  • runメソッド
    • runメソッドは終了コード(整数)を返します。
    • 外部コマンドの実行出力を得ることはできません。
    • 外部コマンドの実行が終了するまでスクリプトを待機させることができます。つまり、スクリプトとプログラムを同期させて実行できます。
    • 完全に別プロセスとして外部コマンドを起動します。CScriptでスクリプトを実行した場合には、新しいコマンド・プロンプトが作成されます。
  • execメソッド
    • execメソッドはWshScriptExecオブジェクトを返り値とします。
    • 外部コマンドの標準入力/標準出力/標準エラー出力を利用できます。
    • 新しいコマンド・プロンプトは表示されず、CScriptを実行したコマンド・プロンプトがそのまま使われます。
    • 標準出力と標準エラー出力が4kb以上出力するコマンドは正しく終了待ちができない。

runメソッドのスクリプトサンプル

サンプル1

確認ダイアログを表示してから、バッチファイルを実行する。


Option Explicit

Dim rc
dim objWShell

rc = MsgBox("起動してよろしいですか?", vbYesNo)
If rc = vbYes Then
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run "%comspec% /c .\start_cmd.bat"
    Set objShell = Nothing
End If

サンプル2

単純にコマンドを実行する


strCmd = "%comspec% /c .\start_cmd.bat"
Set objWshShell = WScript.CreateObject("WScript.Shell")
RC = objWshShell.Run(strCmd, 0, True)
WScript.Echo "ReturnCode: " & RC

execメソッドのスクリプトサンプル

標準出力と標準エラー出力を取得する。


Dim WshShell, outExec, StdOut, StdErr
Dim strCmd, szStr

strCmd = "%comspec% /c .\start_cmd.bat"

Set WshShell = CreateObject("WScript.Shell")
Set outExec = WshShell.Exec(strCmd)
Set StdOut = outExec.StdOut
Set StdErr = outExec.StdErr

szStr = "STDOUT" & vbCrLf
Do While Not StdOut.AtEndOfStream
   szStr = szStr & StdOut.ReadLine() &vbCrLf
Loop
WScript.Echo szStr

szStr = "STDERR" & vbCrLf
Do While Not StdErr.AtEndOfStream
   szStr = szStr & StdErr.ReadLine() &vbCrLf
Loop
WScript.Echo szStr

関連ページ