1/99スタックエンジニアの適当記録

適当なことを書きます。関西で転職したいです。

batで日時を取得すると時間によって不具合になる問題

前回、speedtest-cliを使って回線速度を取得するbatを作成した。

roku28632.hatenablog.com

タスクスケジューラはまだ設定していないので、回線速度が遅いと思ったときなどは定期的に手動実行している。
しかし、ある日実行してみるとエラーが発生。
特に変更した記憶もないので、pauseしながらデバックしてみると、どうやら時刻部分がバグっているらしい。

ググってみると、よくある事象らしい。
事象としては時刻取得が一桁の場合に、例えば1時10分だと、「 11000」こんな感じに1の前が「空白文字」になってしまう。

前回のコードで考えると、

echo %d% >> %date_YYYYMMDD%%time_YYYYMMDD%.log

この部分が、 「20191211 11000.log」という感じで途中が空白になってしまい、予期せぬ不具合になっている。

対処方法は「0埋め」を使う。

0埋める方法

set date_YYYYMMDD=%d:~0,4%%d:~5,2%%d:~8,2%
REM 0埋め
set date_YYYYMMDD = %date_YYYYMMDD: =0%

batの文字列置換の書き方は、
変数名=%変数名=置換前文字列:=置換後文字列%
なので、上のコードでは空白文字列を0に置換している。

結果は、
コレが  20191211 11000.log
こうなる 20191211011000.log

たぶん、よくbatファイルを書く人なら絶対知っている、日時取得のテンプレートとして覚えておくべき書き方だろうな。