1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT(ドス・バット

bat は set /a 計算後の日付と時刻をインターセプトします、08 と 09 は不正な 8 進数として扱われます

2022-01-08 20:39:30

バッチBATで時間間隔を決めるには?

set XTHH=%time:~0,2%
set XTMM=%time:~3,2%
set JKSJ=%XTHH%%XTMM%
if %JKSJ% leq 0830 (
echo 11111111111111
) else (
if %JKSJ% geq 1730 (
echo 2222222222
) else (
echo 33333333333333333
)
)

機能を実装する。JKSJ (0830<=JKSJ<=1730) の場合、33333333 を出力し、それ以外の場合 (1111111 または 2222222222) を出力する。
JKSJが0830以下の場合は111111111を、JKSJが1730以上の場合は2222222222を、それ以外の場合は33333333を出力する

問題:監視時刻が0510-0726の場合、表示がおかしくなる。バグがあります...。111111と表示するのが妥当なのですが、33333と表示されるようになってしまいましたが、何か特別な処理があるのでしょうか?先輩方にご教授お願いします。

08と09が不正な8進数として見られる問題の解決策は以下の通りです。

@echo off
set XTHH=%time:~0,2%
set XTMM=%time:~3,2%
set JKSJ=%XTHH%%XTMM%
if 1%JKSJ% leq 10830 (
    echo 11111111111111
) else (
    if 1%JKSJ% geq 11730 (
        echo 2222222222
    ) else (
        echo 33333333333333333
    )
)
pause

説明

0から始まる数字はBATでは8進数とみなされるため、前に1をつけることでこの問題を回避できます。