このエントリーをはてなブックマークに追加


VBScriptで外部コマンドを実行する方法・Execメソッド

WshShellオブジェクトのExecメソッドを使い、VBScriptで外部コマンドを実行する方法といくつかの実行方法のサンプルを以下に記します。
同じような動作するするメソッドとしてRunメソッドがあります。
Runメソッドに関しては「外部コマンドを実行する方法・Runメソッド」を参照してください。


スポンサーリンク

関連記事

とりあえずExecメソッドを利用して外部コマンドを起動する

mkdirコマンドを使用し、実行したカレントディレクトリににsakuraディレクトリを作成してみます。

Dim oWshShell, oExec

Set oWshShell = CreateObject("WScript.Shell")
Set oExec = oWshShell.Exec("mkdir sakura")

上記のVBScriptでsakuraディレクトリが作成されます。

Execメソッドを利用してnotepadを起動してみる

Dim oWshShell, oExec

Set oWshShell = CreateObject("WScript.Shell")
Set oExec = oWshShell.Exec("notepad")

このVBScriptを起動すると、notepadが起動してVBScriptが終了します。
nodepadが終了するまで、VBScriptが待っているようにするには、以下のようにします。
notepadが起動されて、VBScriptはDo While ... Loopに入ります。
WshScriptExecのStatusプロパティはExecで起動したプロセスが起動中の間は0を示します。
プロセスが終了すると、Statusプロパティは1となります。
Do While ... Loop 内でsleep 100することにより、100ミリ間隔でStatusプロパティの値を確認しています。
notepadを閉じると、Bye!が表示されます。

Dim oWshShell, oExec

Set oWshShell = CreateObject("WScript.Shell")
Set oExec = oWshShell.Exec("notepad")
Do While oExec.Status = 0
  WScript.Sleep 100
Loop
WScript.Echo "Bye!"

外部コマンドが出力する文字列を取得する

WshScriptExecオブジェクトのStdOutプロパティ, StdErrプロパティを利用することにより実現できます。
以下に、StdOut, StdErrプロパティを利用したVBScriptのサンプルコードと実行結果を記します。

WshScriptExec.StdOut サンプル

このVBScriptのサンプルは、dirコマンドを実行しdirコマンドがSTDOUTとSTDERRに出力した内容を表示します。
このサンプルではStdErrの文字列は無いので、STDOUTのみ表示されます。
(dirコマンドを実行するため、cmd /C を追加しています。直接dirと書いたら動きませんでしたので。)

Dim oWshShell, oExec, oStdOut, oStdErr

Set oWshShell = CreateObject("WScript.Shell")
Set oExec = oWshShell.Exec("cmd /C dir")
Set oStdOut = oExec.StdOut
Set oStdErr = oExec.StdErr

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

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

WshScriptExec.StdErr サンプル

上記のサンプルとほとんど同じです。
Execメソッドにより起動するdirコマンドに無効なオプションを指定しています。
このVBScriptを起動するとSTDOUTには何も表示されず、STDERRに無効なパラメータであるメッセージが表示されます。

Dim oWshShell, oExec, oStdOut, oStdErr

Set oWshShell = CreateObject("WScript.Shell")
Set oExec = oWshShell.Exec("cmd /C dir /ABCDEFG")
Set oStdOut = oExec.StdOut
Set oStdErr = oExec.StdErr

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

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

スポンサーリンク


添付ファイル: fileexec05.zip 200件 [詳細] fileexec01.zip 273件 [詳細] fileexec04.zip 267件 [詳細] fileexec03.zip 217件 [詳細] fileexec02.zip 226件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:50:31 (1280d)