バッチでn日前を求めるには

こちらのページに「バッチで前日の日付を求める」というものがあります。

じゃくさんのページ

じゃくさんのページにも「n日前の日付を求める」というものも紹介されていますが、

1つのバッチで行いたかったので、「バッチで前日の日付を求める」を加工しました。

処理の中で「バッチで前日の日付を求める」を指定回数だけリピートしています。

引数1に何日前か、引数2に日付を入れることで、指定日からn日前が求められます。

リピートしているので1000日や10000日とすると処理に時間がかかりますが、

30日くらいであればそんなにストレスなく、応答があるかと思います。

−−−−−−ここから−−−−−−

@echo off
REM −−−−−−−−−−−−−−−
REM 日付のn日前を求める
REM 引数1・・・n(数値)
REM 引数1がないときは1(前日)
REM 引数2・・・YYYY/MM/DD 形式
REM 引数2がないときは本日とする。
REM −−−−−−−−−−−−−−−

if "%1"=="" (
set n=1
) else (
set n=%1
)

if "%2"=="" (
for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a
) else (
set orgdate=%2
)

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~5,2%
set dd=%orgdate:~8,2%
set count=0

:Repeat

:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set /a dd=%dd%-1

if %dd% NEQ 0 goto end

:月跨り処理
set /a mm=%mm%-1
if %mm% EQU 0 set mm=12&&set /a yy=%yy%-1

set /a dd=%dd%+31
if "%mm%"=="2" set /a dd=%dd%-3
if "%mm%"=="4" set /a dd=%dd%-1
if "%mm%"=="6" set /a dd=%dd%-1
if "%mm%"=="9" set /a dd=%dd%-1
if "%mm%"=="11" set /a dd=%dd%-1

:閏年処理
:4で割り切れるか?
set /a u=%yy% %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=%yy% %% 400
set /a v=%yy% %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=%dd%+1

:END
set mm=0%mm%
set mm=%mm:~-2%

set dd=0%dd%
set dd=%dd:~-2%
set /a count=%count%+1
set DT=%yy%/%mm%/%dd%

IF %count% NEQ %n% goto Repeat

echo %n%日前は%DT%です。

:EXIT

−−−−−−ここまで−−−−−−
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。