VBS(WSH)で、コマンドラインアプリを実行して、その標準出力を得る方法。
いろいろ調べた結果、WScript.ShellのExecメソッドを利用する方法と、同じくRunを使う方法があることが判明。
今回は私がFilemaker用に開発したVBS実行プラグインでコマンドラインアプリの出力を得たいとおもっている。
Execメソッドは標準出力から直接データを得ることができるが、Runメソッドでは実行結果をいったんテキストファイルに保存し、その内容を取得する必要がある。
「じゃぁExecで良し!」と思ったら、全然良くなかった。Execメソッドを使うと、コマンドプロンプトが必ず開いてしまう。。。Filemakerで使うことを前提としているので、あまりに不都合だ。
ということで、Runメソッドで実装。
Function KIYO_VBS( dummy )
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
exCommand = "実行するコマンド"
Dim tmpFileName
tmpFileName = "tmptmptmp.txt"
Dim command
command = "cmd /S /C " & exCommand & " > " & tmpFileName
Dim result
result = WshShell.Run(command, 0, true)
Dim fso
Dim TextFile
Dim Text
Set fso=CreateObject("Scripting.FileSystemObject")
Dim Path
Path = tmpFileName
Dim fUNICODE
Dim BOM
Set TextFile = fso.OpenTextFile( Path )
If Not TextFile.AtEndOfStream Then BOM = TextFile.Read(2)
fUNICODE=BOM=Chr(&HFF)&Chr(&HFE) Or BOM=Chr(&HFE)&Chr(&HFF)
Set TextFile = fso.OpenTextFile(Path,,,fUNICODE)
If Not TextFile.AtEndOfStream Then
Text=TextFile.ReadAll()
Else
Text="(Empty)"
End If
TextFile.Close
fso.DeleteFile(tmpFileName)
KIYO_VBS = Text
End Function
WScript.Echo( KIYO_VBS("") )
KIYOVBSプラグインで使うことを前提としているので、なんだかとっても変な書き方でごめんなさい。必要に応じて書き換えて使ってください。