Windowsバッチ(.bat)で指定時間にダイアログを出すタイマーを作る

概要

スケジューラーもカレンダーもない(インストールさせてもらえない)PCで会議の時間を知らせてほしいと感じる瞬間はありませんか、私はありました。
正直slackのリマインダーだと情報多すぎて気づかないししょっちゅう会議の時間も変わるので、時間がテキスト入力できて、ダイアログ表示したり音を鳴らしたりしてほしいわけです。
Windows標準のアラーム&クロックを手で動かすのすら嫌な日のためのリマインダーバッチです。

更新

2023/11/23 引数からの実行もできるようにした。

コード

下記のコードをテキストファイルに貼り付けて拡張子を「.bat」にします。
エンコードはshift-jisのほうが良いです。

クリックしてアラートをかける時間を半角数字で入力します。
時間になるとアラートダイアログと、対応していればビープ音がなるはずです。
一応、秒数も考慮しています。

@echo off
IF "%~1"=="" (
  echo タイマーを鳴らす時分を入力
  set /p hh="何時(0-23):"
  set /p mm="何分(0-59):"
) ELSE (
  REM コマンドから実行
  set /a hh=%1
  set /a mm=%2
)

REM 時分秒までの差分を取得
SET /a nHOUR=%time:~0,2%
SET /a nMIN=%time:~3,2%
SET /a nSEC=%time:~6,2%

SET /a HOUR=%hh%-%nHOUR%
SET /a MIN=%mm%-%nMIN%
SET /a SEC=%nSEC%

echo "%hh%時%mm%分にアラートを鳴らします。"

REM タイマーを秒数にする
set /a "ss=(%HOUR%*60*60)+(%MIN%*60)-%SEC%"

REM タイマーを掛ける
timeout %ss%

REM 現在の時分秒を取得
SET HOUR2=%time:~0,2%
SET MIN2=%time:~3,2%
SET SEC2=%time:~6,2%
 
REM 終了時にビープ音を鳴らす
rundll32 user32.dll,MessageBeep
 
REM 終了時にアラートを出す
echo MsgBox "%HOUR2%時%MIN2%分%SEC2%秒になりました。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs 
del /Q %TEMP%\msgbox.vbs

動作確認

ダイアログで出てくる時刻はダイアログを表示した瞬間の時刻になっています。
スクショにはありませんが、多重起動もできます。

※中身をわかりやすくするため、バッチの中身をテキストエディタで開いています。

コマンドラインからの実行もできます。
下記は10時56分にアラートを出す例です。
頭にstartとつけると別ウィンドウで開いてくれます。

start alert.bat 10 56

おわり。