バッチファイルで現在時刻を比較するのにいろいろとハマってしまったので正常に比較できる方法や、うまくいかなかったときのコードを備忘録に残したいと思います。
うまくいったコード
結論からいうと下記のコードで正常に比較ができました。
set CHECK_TIME=" 8:00:00.00" setlocal ENABLEDELAYEDEXPANSION if "!TIME!" gtr %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より大きい" ) if "!TIME!" lss %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より小さい" )
9時に実行した結果
"現在時刻は " 8:00:00.00" より大きい"
7時に実行した結果
"現在時刻は " 8:00:00.00" より小さい"
うまくいかなかったコード
うまくいかなかったコード 1
set CHECK_TIME=" 8:00:00.00" if "%TIME%" gtr %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より大きい" ) if "%TIME%" lss %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より小さい" )
上記コードのみのバッチファイルだと正常に動作しますが、遅延環境変数を使用していないので、%TIME%の値は更新されずループ内で処理する場合などうまく動作しないことがあります。
うまくいかなかったコード 2
set CHECK_TIME=" 8:00:00.00" setlocal ENABLEDELAYEDEXPANSION if !TIME! gtr %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より大きい" ) if !TIME! lss %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より小さい" )
9時に実行した結果
"現在時刻は " 8:00:00.00" より小さい"
7時に実行した結果
"現在時刻は " 8:00:00.00" より小さい"
IF分で比較する際に !TIME! をダブルクォーテーションで囲まないと正常に比較されません。
うまくいかなかったコード 3
set CHECK_TIME="8:00:00.00" setlocal ENABLEDELAYEDEXPANSION if "!TIME!" gtr %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より大きい" ) if "!TIME!" lss %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より小さい" )
9時に実行した結果
"現在時刻は "8:00:00.00" より小さい"
7時に実行した結果
"現在時刻は "8:00:00.00" より小さい"
比較対象の環境変数 CHECK_TIME の時間(H)が一桁の場合、最初に半角スペースを入れないと正常に比較されません。
うまくいかなかったコード 4
set CHECK_TIME="08:00:00.00" setlocal ENABLEDELAYEDEXPANSION if "!TIME!" gtr %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より大きい" ) if "!TIME!" lss %CHECK_TIME% ( echo "現在時刻は %CHECK_TIME% より小さい" )
9時に実行した結果
"現在時刻は "08:00:00.00" より小さい"
7時に実行した結果
"現在時刻は "08:00:00.00" より小さい"
比較対象の環境変数 CHECK_TIME の時間(H)が一桁の場合、値を”08:00:00.00″の形式(最初に0を入れる)に設定すると正常に比較されません。
「うまくいかなかったコード 3」と同様に、最初に半角スペースを入れるようにしてください。
まとめ
バッチファイルで現在時刻をIF文で比較する場合、気を付けるポイントは以下の3点です。
- 遅延環境変数 !TIME! を使用すること
- IF文で比較する際、 “!TIME!” で表記すること
- 比較対象の時間が1桁(10時より前の時) “0:00:00.00” の形式で記述すること
コメント