Windowsバッチ dateコマンドで前日を取得する方法

今回は、Windowsのバッチファイルで使える「dateコマンド」で前日を取得する方法について解説します。

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が取得できます。

dateコマンドで前日を取得するバッチファイルの解説

バッチファイルの内容について解説します。

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コマンドで前日を取得するバッチファイルの解説についてでした。

タイトルとURLをコピーしました