今回は、Windowsのバッチファイルで使える「dateコマンド」で前日を取得する方法について解説します。
下記のコードでdateコマンドで前日を取得できます。
@echo off
setlocal enabledelayedexpansion
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set /a day=day-1
if %day% lss 1 (
set /a month=month-1
if %month% lss 1 (
set month=12
set /a year=year-1
)
if %month%==1 set day=31
if %month%==2 set day=28
if %month%==3 set day=31
if %month%==4 set day=30
if %month%==5 set day=31
if %month%==6 set day=30
if %month%==7 set day=31
if %month%==8 set day=31
if %month%==9 set day=30
if %month%==10 set day=31
if %month%==11 set day=30
if %month%==12 set day=31
)
if %day% lss 10 set day=0%day%
if %month% lss 10 set month=0%month%
echo 前日の日付は %year%-%month%-%day% です。
本日は、2024/10/27です。上記バッチファイルを実行すると、前日の2024/10/26が取得できます。
バッチファイルの内容について解説します。
setlocal enabledelayedexpansion
バッチファイルで変数の遅延展開を可能にします。この設定により、変数を計算やループ内で更新しても正しく参照できるようになります。
日付を年、月、日に分解し、変数に代入します。
set year=%date:~0,4% %date:~0,4%は年の部分(最初の4文字)を抽出しています。
set month=%date:~5,2% 5文字目から2文字を抽出して、月を取得します。
set day=%date:~8,2% 8文字目から2文字を抽出して、日を取得します。
前日の計算
set /a day=day-1現在の日から1を引いて、前日を計算しています。例えば、10月1日なら「10月0日」になり、その後の処理で調整します。
日付の調整
if %day% lss 1のチェックで、「1日未満(0日以下)」になった場合、月を1つ減らし、前の月の最終日を設定します。
・月が1月未満の場合
i f %month% lss 1で、月が1月未満になった場合には12月に設定し、前年の計算を行います。
・月の日数の設定
各月ごとの最終日を調整しています。2月については固定で28日にしているため、閏年には対応していません。
ゼロ埋め処理
if %day% lss 10 set day=0%day% 日付や月が1桁のときに「01」や「02」のようにゼロ埋めを行い、2桁表示に統一しています。
前日の表示
最後に前日の%year%-%month%-%day%を表示します。
今回は、dateコマンドで前日を取得するバッチファイルの解説についてでした。