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

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)

* 関連記事 [#md2c9632]
-[[外部コマンドを実行する方法・Runメソッド>WSH/外部コマンドを実行する方法・Runメソッド]]

* とりあえずExecメソッドを利用して外部コマンドを起動する [#y29d9dfa]
mkdirコマンドを使用し、実行したカレントディレクトリににsakuraディレクトリを作成してみます。
#ref(exec01.zip)

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

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

* Execメソッドを利用してnotepadを起動してみる [#u81b2f01]
#ref(exec02.zip)

 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!が表示されます。

#ref(exec03.zip)
 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!"

* 外部コマンドが出力する文字列を取得する [#v147e77a]
WshScriptExecオブジェクトのStdOutプロパティ, StdErrプロパティを利用することにより実現できます。~
以下に、StdOut, StdErrプロパティを利用したVBScriptのサンプルコードと実行結果を記します。

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

 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 サンプル [#dcc12ab4]
上記のサンプルとほとんど同じです。~
Execメソッドにより起動するdirコマンドに無効なオプションを指定しています。~
このVBScriptを起動するとSTDOUTには何も表示されず、STDERRに無効なパラメータであるメッセージが表示されます。
#ref(exec05.zip)
 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

#htmlinsertpcsp(win-btm.html,win-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS