小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


CScriptとWScript

以前、業務中の定型的な作業を自動化しようと思い、VBScriptを使ってちょっとしたスクリプトを書いたことがあった。作成した.vbsファイルをWindows Server 2008上で実行してみると、WScript.Echoの出力しようとした文字列が、コンソールではなく、メッセージボックスに表示されてしまった。
原因はなんだろうかと調べてみたら、以下のような理由だということがわかった。

WScriptとCScriptはほぼ同様の機能を持ちますが、WScriptは対話向け、CScriptは
コンソール向けに利用できる点が異なります。
(...途中省略)
Wscript.Echo "メッセージを表示します"

出力結果
WScriptではメッセージボックスで、CScriptはコマンドライン上に表示されます。

WSHはバッチ処理的に使うことが多く、一般的にコンソールに向きのCScriptを使用
します。
WscriptとCscriptの違い−WSH@Workshop

原因はスクリプトを実行するCScriptとWScriptの違いにあったらしい。
エクスプローラから.vbsファイルを実行しようとしたときに、WScript.exeを使ってスクリプトが起動されていたようだ。試しに、コマンドプロンプトからCScript.exeを指定して起動したら、コンソールにメッセージが出力されるようになった。

対策としては、以下のようにCScriptを指定して、任意のスクリプトをキックするバッチファイルを書けば、いちいちコマンドプロンプトを開く必要はなくなる。
kicker.bat

CScript hoge.vbs

2009.02.06追記

わざわざ別のバッチファイルを用意して、CScriptを指定してスクリプトをキックするなんて面倒なことをしなくても良い、別の方法があった。
規定のスクリプトホストを一時的にCScriptに変更して実行すれば良いらしい。
詳細は、http://winofsql.jp/VA003334/vbsguide070103200002.htm