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