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プラグインで使うことを前提としているので、なんだかとっても変な書き方でごめんなさい。必要に応じて書き換えて使ってください。