プログラミング

VBScriptにスクリプト実行の進行度を表示させる

2009年10月22日

SFC miniと関連して、e-mailで問い合わせを頂いた。『SFC miniを使って、VBScriptでプログレスバーを表示することが出来ないか』とのこと。

SFC miniではGUIプログラミングが一応可能なので、多分出来る。でも、簡単ではない。

そこで、実用性だけ考えて、もう少し簡単にこういったことが実現できないかを考えてみた。

結論としては、VBScriptをcscript.exeで実行すればよい。WScript.Echoメソッドで、進行度を表示することが出来る。プログレスバーのようにカッコ良くは行かないけれど、作業がどれくらい進んだかを確認するだけなら、これで良いはず。他には、HTAなど利用することも出来るだろうけれど、cscriptで書いたほうが簡潔だと思う。

ひとつ問題は、Windowsのデフォルトでは、vbsファイルをダブルクリックするとwscript.exeが立ち上がってしまうこと。MakeExeを使えば、作成したスクリプトをcscript.exeで起動することは出来るが、作成したVBSをいちいちEXEに変換するのも面倒。

そこで、wscript.exeで立ち上がったときは、cscript.exeで立ち上げなおすスクリプトを考えてみた。こんな感じ
option explicit
if lcase(right(wscript.fullname,11))="wscript.exe" then
  createobject("wscript.shell").run("cscript.exe """+wscript.scriptfullname+"""")
  wscript.quit
end if

dim i
for i=10 to 100 step 10
  wscript.echo i&"% done"
  wscript.sleep 100
next 
msgbox "All done!"

2行目から5行目までが、その切り替え部分。スクリプトの起動に引数が必要な場合を考慮していないので、そういったケースでは若干書き換えが必要なことに注意。

サンプルスクリプトでは、wscript.echoを利用してコンソールに進行度を表示し、最後にmsgboxを利用してダイアログを表示するようにしている。JScriptでやりたい場合はScriptControl経由でmsgboxを使うことになる。

実行結果

20091023-vbscript.png

コメント

コメントはありません

コメント送信