Windowsバッチファイルでメッセージボックスを無理やり表示させる方法

バッチファイル プログラミング
この記事は約4分で読めます。

※当ブログではアフィリエイト広告を利用しています。

Windowsバッチファイル(.bat)でメッセージを表示する場合は、通常「echo」コマンドでプロンプト内に標準出力させるので、メッセージボックスは使えません。
しかし、メッセージボックスの方がユーザーには伝わりやすい…かも。
調べてみると、バッチファイルで無理やりメッセージボックスを表示させる方法がありました。

なお、今回作業したバージョンは以下の通りです。

  • Windows 10 Pro(64bit)

VBScriptと組み合わせてメッセージボックスを表示する

無理やりメッセージボックスを表示する方法は、Microsoftのスクリプト言語である「VBScript」(.vbs)と組み合わせて行います。
VBScriptは、Windows上で標準で動作します。
なので、ソースコードのファイル拡張子を「.vbs」にしてダブルクリックすれば簡単に実行できます。
メッセージボックスを表示するには、VBScriptのMsgBox関数を使用します。
関数の詳細はMicrosoftリファレンスでご確認いただけます。

メッセージボックスを表示するバッチファイル

実際に、メッセージボックスを表示するバッチファイルを作成してみました。
内容は、echoコマンドでVBScriptのメッセージボックスを表示するコードを一時ファイルとして出力し、それを実行するというものです。

@echo off

rem メッセージ表示
echo MsgBox "メッセージを表示します。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs

rem ファイル削除
del /Q %TEMP%\msgbox.vbs

pause

これを実行すると、このようにメッセージボックスが表示されます。
そして、TEMPフォルダ(C:\Users\[ユーザー名]\AppData\Local\Temp)にVBScriptファイルが作成されていました。

MsgBox

確かに、エラーや情報などの表示させるだけのメッセージならこちらの方が伝わりやすいかも…。
念のため、次の行で作成したファイルは削除しています。

メッセージボックスの戻り値を取得する

さらに無理やりで、OK/キャンセルボタンのメッセージボックスを使用して、押したボタンを戻り値として取得してみます。
戻り値として取得できるのは、直前に実行したコマンドのエラーコードが格納されている環境変数「ERRORLEVEL」の整数のみですので、これに押したボタンの値を設定します。
OK/キャンセルボタンの値は、以下の通りです。

  • [OK] … 1(vbOK)
  • [キャンセル] … 2(vbCancel)

バッチファイルは、以下のようになりました。

@echo off

rem メッセージ表示
echo Dim answer:answer = MsgBox("よろしいですか?",vbOKCancel,"確認"):WScript.Quit(answer) > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs
echo %ERRORLEVEL%

rem ファイル削除
del /Q %TEMP%\msgbox.vbs

pause

上記コードのポイントは以下です。

  • ~:~ … コロンで複数行を1行に連結する。
  • WScript.Quit(0) … 指定されたエラーコードで実行を終了する。

VBScriptでコロン(:)を使用し、1行に連結して3行分書いています。
「WScript.Quit」で、終了時のエラーコードにOK/キャンセルボタンで押したボタンの値を設定しています。
これを実行すると、押したボタンによって「1」か「2」が表示されますので、後はif文で条件分岐などを行えばいいかと思います。
ほんとに無理やり。。

1行で書くなら以下のようにします。
こちらの方がスマートですね。

@echo off

rem メッセージ表示
echo WScript.Quit(MsgBox("よろしいですか?",vbOKCancel,"確認")) > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs
echo %ERRORLEVEL%

rem ファイル削除
del /Q %TEMP%\msgbox.vbs

pause

最後に

今回は、Windowsバッチファイル(.bat)で、メッセージボックスを表示する方法を紹介しました。
無理やりな方法ですが、ユーザーには分かりやすいかも…。

コメント

  1. さとう より:

    参考にさせていただいています。
    msgBOXの文字列を改行することは可能でしょうか?

    • えふめん えふめん より:

      コメントありがとうございます。
      改行するには、改行の定数vbCrLfを使用すれば可能です。

      以下のように、エスケープしたアンパサンドでvbCrLfを繋げれば改行されて出力されると思います。


      echo MsgBox "メッセージを表示します。" ^&vbCrLf^& "メッセージを表示します。", vbInformation, "情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs

タイトルとURLをコピーしました