Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

GUIのダイアログを使ったエンドユーザ向け対話バッチの実現

usebackqを使ってコマンドの結果を変数へ格納する

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/04/05 08:00

DOSのバッチから、VBScriptやCで作成した簡易なプログラムを呼び出して対話型の処理を行う方法を紹介します。これを利用すると、バッチ処理の途中でダイアログボックスを呼び出して目的のファイルを選択させる、といったエンドユーザに優しい易しい処理などを実現できます。

目次

はじめに

 「エンドユーザーのPCにバッチファイルを置き、クリックして実行してもらう」といった局面が、頻度としては少ないものの、たまにあります。

 そのような時によく使われるのはWSHHTAでしょう。特に、HTAの場合は、HTMLを使ってユーザーフレンドリーなGUIのアプリケーションを簡便に作成することができます。

 しかし、ここではあえてコマンドラインのバッチにこだわって話を進めてみたいと思います。

対象読者

 仕事でバッチファイルを作成したり修正したりする必要がある人。

必要な環境

 Windows 2000/Windows XPが対象です(Vistaは未検証)。

なぜバッチファイルを使うのか

 理由は単純で、筆者のように「バッチの方が書き慣れている人」の場合、同じ処理を書くにしても、工数を抑えることができるからです。

 NT以降のDOSのバッチであれば、IF分岐やFORループが使えますし、環境変数ERRORLEVELを使用して、ある程度は細かいエラーハンドリングも可能です。また、バッチを書き慣れている人であれば、これまでの蓄積で、再利用可能な小物バッチがそれなりに揃っているであろう、という点も理由の一つです。

 しかし、やはりそこはバッチファイルですから、お客様から「あの黒い窓はどうもなじみにくい」というご意見をいただくこともあります(色は簡単に変えられます)。

 特に、

set /p 変数名=

 などを使った「値の入力」などについては、見た目上、どうしても貧弱になってしまいます。

 また「ファイル選択」についても、プロンプトに直接ファイルをドラッグ&ドロップし、上記と同様の方法でフルパスを取得できますが、これなどもエンドユーザーにとっては、見慣れた[ファイルを選択]ダイアログの方がいい、と思われる部分のようです。

GUIのダイアログを使ったバッチができないか

 さて、ここからが本題です。

 せっかく作ったバッチのすべての内容をWSHやHTAに書き換えることなく、エンドユーザーが入力・選択する部分のインターフェイスのみ、OS標準の見慣れたダイアログにできないものでしょうか。

 ここで紹介する方法は、実際に筆者がエンドユーザー向けの対話型バッチとして作成したものを基にしています。

 使用するのは短いVBScriptと短いCで書いたコマンドラインのアプリ。コアな部分はバッチファイル内でまかなうという前提で、VBScriptとCのアプリはあくまでも補助的な意味合いです。

バッチのシナリオ

 シナリオは次のようなものであるとします。

  1. エンドユーザーがバッチファイルのショートカットをダブルクリック
  2.  
  3. メッセージボックスを表示して処理を行うか確認
  4. [はい]は処理継続。[いいえ]は処理終了。
    メッセージボックスを表示
    メッセージボックスを表示
  5. インプットボックスを表示して必要事項を入力
  6. 入力値があれば処理継続。未入力/キャンセルは処理終了。
    インプットボックスを表示
    インプットボックスを表示
  7. 処理対象となるファイルをコモンダイアログで選択
  8. 入力値があれば処理継続。キャンセルは処理終了。
    コモンダイアログを表示
    コモンダイアログを表示
  9. 結果の出力先となるディレクトリをコモンダイアログで選択
  10. 入力値があれば処理継続。キャンセルは処理終了。
    ディレクトリコモンダイアログを表示
    ディレクトリコモンダイアログを表示
  11. 必要な情報は揃ったはずなので、以下、XXX処理を行う
  12. 最後に終了メッセージを表示
  13. (ステータスのレベルによりダイアログのアイコンを変更)
    メッセージボックスを表示
    メッセージボックスを表示

GUIに関連する小物達

 小物として使うのは

  1. msgbox.vbs(メッセージボックス表示)
  2. inputbox.vbs(インプットボックス表示)
  3. commdlg.exe(ファイル選択ダイアログ表示)
  4. commdlgd.exe(ディレクトリ選択ダイアログ表示)

 VBScriptからファイル選択などのコモンダイアログを使うには、Visual Studioのライセンス(ランタイムのことではない)が必要なため、ここでは短いCで書いたコマンドラインのアプリを使います。

 本稿は『バッチからアプリケーションの結果を取得し処理を行う』のが目的ですので、VBScriptとCのプログラムの内容についての詳細は割愛します。添付のソースを参照してください(本当に簡単なものです)。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5