• ベストアンサー

wshでDOSコマンドを利用するには。 パイプ処理

http://www.okweb.ne.jp/kotaeru.php3?q=305516 の続きです。 wshでDOSコマンドのnetstat -nの値をメッセージボックスで表示するには、次のスクリプトの”コマンド”の部分にnetstat -nを入れることで可能です。 (FlossenEngel 様作成) ------------------------------------- Set WshShell = WScript.CreateObject("WScript.Shell") Set objExec = WshShell.Exec("コマンド") Do While objExec.Status = 0 WScript.Sleep(100) Loop sout = "" Do While Not objExec.StdOut.AtEndOfStream sout = sout & objExec.StdOut.ReadLine & Chr(13) & Chr(10) Loop MsgBox sout ----------------------------------------------- さて、netstat -n|find " ESTABLISHED" というぐあいに パイプ処理を行うにはどうすればよいでしょうか? Set objExec = WshShell.Exec("netstat -n|find " ESTABLISHED" ") とするとエラーになります。 "を入れ子にできないようですね。 解決方法ご存知の方おしえてくださいませ。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

う、よく考えたらこの例に限ってはわざわざfindを起動しなくても Set objExec = WshShell.Exec("netstat -n") して Do While Not objExec.StdOut.AtEndOfStream tmp = objExec.StdOut.ReadLine If InStr(tmp,"ESTABLISHED") > 0 Then sout = sout & tmp & Chr(13) & Chr(10) End If Loop ですね(x_x)

norinori555
質問者

お礼

なんどもお世話になりました。 大変勉強になります。ありがとうございました。 パイプ処理ってできないのですね。 これも大きな収穫です。 ありがとうございました。

その他の回答 (2)

回答No.2

あ、どうもです(^^; 問題解決したようでよかったです、ってもう次のステップに進まれてるんですね(^^;レスポンス悪くてすみません(^^;) でですね、Execは標準入力、標準出力、標準エラー出力をトラップします。横取りしちゃうんです。だからStdOutで取り出せるんですが、このためパイプも使えないはずです。少なくともウチでは使えません(^^; というわけで、ご質問のようなことは自前で処理する必要があります。StdOutを取り込んでStdInに書き込むという...。 Set WshShell = WScript.CreateObject("WScript.Shell") Set objExec = WshShell.Exec("netstat -n") Do While objExec.Status = 0 WScript.Sleep(100) Loop sout = "" Do While Not objExec.StdOut.AtEndOfStream sout = sout & objExec.StdOut.ReadLine & Chr(13) & Chr(10) Loop MsgBox sout Set objExec = Nothing Set objExec = WshShell.Exec("find ""ESTABLISHED""") objExec.StdIn.Write(sout) objExec.StdIn.Close() Do While objExec.Status = 0 WScript.Sleep(100) Loop sout = "" Do While Not objExec.StdOut.AtEndOfStream sout = sout & objExec.StdOut.ReadLine & Chr(13) & Chr(10) Loop MsgBox sout こんな感じになります。(Win98SP1+IE5.5SP2で確認)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

VBScriptでは、ダブルクォーテーションを文字列の一部として使いたいときは2つ続けます。 Set objExec = WshShell.Exec("netstat -n|find "" ESTABLISHED"" ") となります。

norinori555
質問者

お礼

こんばんは。回答ありがとうございます。 そっか、 " を二重にすればよかったのですね。 ジャバスクリプトみたいに ' を使うのかな。と思ってました。vbsでは ' はコメントになってしまいますからね。

関連するQ&A