はじめに
導入作業用にファイルコピーやiniファイルを書き換えるバッチを作成しました。
その際により簡易化するため、入力内容も選択メニューにし、番号入力のみにしたうえで担当者に確認してもらったところ、衝撃な一言がありました。
「キーボードが使えないのでマウスの操作だけにしたい」
工場の作業場のPCはマウスしか置いてなく、入力が必要な場合にはキーボードを持参するかリモート接続して操作していたとのことでした。
メッセージボックスを表示
それならば、バッチ実行中にメッセージボックスを表示してマウスで選択するようにすればいいと考え、バッチを作り直しました。
どのボタンが押されたかは、バッチの%ERRORLEVEL%
で取得できます。
指定する値で表示されるボタンと値の関係は、次のようになります。
()内が%ERRORLEVEL%
の値です。
コマンド | ボタン(ERRORLEVELの値) |
---|---|
YesNoCancel | はい(6) いいえ(7) キャンセル(2) |
YesNo | はい(6) いいえ(7) |
OK | OK(1) |
OKCancel | OK(1) キャンセル(2) |
RetryCancel | 再試行(4) キャンセル(2) |
AbortRetryIgnore | 中止(3) 再試行(4) 無視(5) |
VBScript
@echo off
set caption=タイトル
set message=作業内容を選択してください
set mesYes=【はい 】作業はいの処理内容
set mesNo=【いいえ】作業いいえの処理内容
set mesCancel=【キャンセル】作業終了
echo res = MsgBox("%message%" ^& vbCrLf ^& vbCrLf ^& "%mesYes%" ^& vbCrLf ^& "%mesNo%" ^& vbCrLf ^& "%mesCancel%", vbYesNoCancel, "%caption%"):WScript.Quit(res) > %TEMP%\msgbox.vbs
%TEMP%/msgbox.vbs
rem 6:はい、7:いいえ、2:キャンセル
echo %ERRORLEVEL%
del %TEMP%\msgbox.vbs
pause
PowerShell
@echo off
set caption=タイトル
set message=作業内容を選択してください
set mesYes=【はい 】作業はいの処理内容
set mesNo=【いいえ】作業いいえの処理内容
set mesCancel=【キャンセル】作業終了
set msgbox="Add-Type -AssemblyName System.Windows.Forms;$result = [System.Windows.Forms.MessageBox]::Show(
set msgbox=%msgbox%\"%message%`n`n%mesYes%`n%mesNo%`n%mesCancel%`n\", '%caption%', 'YesNoCancel', 'Question');Exit $result;"
powershell -ExecutionPolicy RemoteSigned -NoProfile -Command %msgbox%
rem 6:はい、7:いいえ、2:キャンセル
@echo 戻り値は %ERRORLEVEL% です
pause
【2025/03/30追記】
PowerShellのオプション -NoProfile を追加しました。このオプションは、PowerShellの実行時に読み込む環境情報を読み込まないため、起動が多少速くなります。不要な場合は指定しなくてもいいです。
表示するアイコン
表記 | コマンド |
---|---|
青い〇内に「i」 | Asterisk、Information |
赤い〇内に「×」 | Error、Hand、Stop |
黄色い△内に「!」 | Exclamation、Warning |
青い〇内に「?」 | Question |
なし | None |
最後に
今回のバッチファイルはVBScript
の方で作成しました。この記事を書くためにPowerShell
の方法も調べてみたところです。
まだ、VBScript
の方が慣れているので採用してしまうのですが、VBScript
は廃止方向にあるため、PowerShell
に切り替えて行かなければいけませんね。