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で立ち上げなおすスクリプトを考えてみた。こんな感じ
2行目から5行目までが、その切り替え部分。スクリプトの起動に引数が必要な場合を考慮していないので、そういったケースでは若干書き換えが必要なことに注意。
サンプルスクリプトでは、wscript.echoを利用してコンソールに進行度を表示し、最後にmsgboxを利用してダイアログを表示するようにしている。JScriptでやりたい場合はScriptControl経由でmsgboxを使うことになる。
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を使うことになる。
実行結果