タスクスケジューラを使わず、特定時刻まで処理を繰り返すbat

きっかけ


Windows OSを使用して とある検証を進めていたとき、コマンドプロンプトで同じ一連の処理を何度も繰り返さなければなりませんでした。

タスクスケジューラを使ってbatファイルを繰り返し実行することも考えましたが、最短の繰り返し時間が5分だったので、別の方法を模索することにしました。

その結果、手動でbatファイルを実行して、特定の時間まで処理を繰り返す方法で目的の検証が可能でした。

batファイルについて


次のようなコードを使ってbatファイルを作成しました。

batファイルの文字コードは、S-JIS(またはANSI)で作成することを前提としています。

@echo off
setlocal
chcp 932
cd /d %~dp0

rem -------------------------------------------------------------------
rem 1. 変数
rem 終了日を設定(yyyymmdd形式)
set endday=20240401

rem 終了時刻を設定(hhmmss形式)
set endtime=183000

rem ログファイルのパスを設定(処理でログを出力する場合)
set batlog=.\%endtime%end.log
rem -------------------------------------------------------------------

:loop
rem 現在の日付を取得(yyyymmdd形式)*1
set nowday=%date:~0,4%%date:~5,2%%date:~8,2%

rem 現在時刻を取得(hhmmss形式)*1
set tmptime=%time: =0%
set nowtime=%tmptime:~0,2%%tmptime:~3,2%%tmptime:~6,2%

rem 日付の判定
if %nowday% gtr %endday% (
    goto end
) else if %nowday% lss %endday% (
    goto process
) else (
    rem 処理を続行
)

rem 時刻の判定
if %nowtime% geq %endtime% (
    goto end
) else (
    goto process
)

:process
rem -------------------------------------------------------------------
rem 2. 処理の繰り返し

rem -------------------------------------------------------------------
rem 3. 待機時間
rem timeout /t 5
rem -------------------------------------------------------------------

goto loop

:end
endlocal
pause

*1 現在の日付と時刻の整形方法については、以下の記事を参考にさせていただいています(2024/04/14閲覧) Windowsのバッチファイル中で日付をファイル名に使用する:Tech TIPS(1/2 ページ) - @IT

概要

このbatファイルは、設定した日付と時刻になるまで処理を繰り返します。用途として検証での手動実行を想定しています。

設定した日時に誤りがある場合、長期間処理を繰り返すことがあるので注意してください。

編集が必要な場所

1. 変数
  • set endday: 終了日を設定します。
  • set endtime: 終了時刻を設定します。
  • set batlog: ログファイルのパスを指定します。
2. 処理の繰り返し
  • 繰り返し実行する処理を記述します。
3. 待機時間

処理が一巡するたびに、一定の待ち時間を設定したい場合に編集します。

  • timeout /t 秒数: 待機する時間を指定します。コード例からremを削除して、秒数を変更してください。

終わりに


このbatファイルが検証の効率化に役立てば幸いですが、 動作確認は簡易なものですので、本情報は参考程度に留めておいてください。