リファレンス、WshScriptExec オブジェクト、Status, StdOut, StdIn プロパティ

まんま

Dim WshShell, oExec, input
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("2011121700.bat")

input = ""

Do While True
  If Not oExec.StdOut.AtEndOfStream Then
    c = oExec.StdOut.Read(1)
    input = input & c
      If InStr(input, "Press any key") <> 0 Then Exit Do
  End If
  WScript.Sleep 100
  'WScript.Echo c
Loop

oExec.StdIn.Write VbCrLf

'i = 0
Do While oExec.Status <> 1
  WScript.Sleep 100
  'WScript.Echo "i: " & i
  'i = i + 1
Loop

で、2011121700.bat は、

echo メッセージ
ping localhost -n 2 > NUL

REM echo Press any key
REM echo 何かキー
pause
  • 完全には理解できていないな…
  • oExec.StdOut.Read(1) は、1文字(バイト?)読んでくるようだ
  • "Press any key" は pause で表示されるメッセージ「何かキー」の訳し忘れなのかと思ったが、そうではなく REM でコメントアウトしていても標準出力に出ているので Exit Do が実行されるようだ