batで日時を取得すると時間によって不具合になる問題
前回、speedtest-cliを使って回線速度を取得するbatを作成した。
タスクスケジューラはまだ設定していないので、回線速度が遅いと思ったときなどは定期的に手動実行している。
しかし、ある日実行してみるとエラーが発生。
特に変更した記憶もないので、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ファイルを書く人なら絶対知っている、日時取得のテンプレートとして覚えておくべき書き方だろうな。