스크립트를 짜다보면 .. 종종 어제 날짜나 며칠 전 날짜를 구해야할 때가 있는데

그 때 필요한 스크립트입니다.

예전에 어디선가 퍼와서 출처는 .. 기억이 잘 나지 않아요 .. (혹 원글 작성자분께서 이 글을 보고 요청하시면 글 내릴꼐요 ~)

요즘 자주 사용하고 있는데 기존에 퍼와서 쓰고 있던 소스에 약간 문제가 있더라구요

 

------------------기존---------------------

@echo off

for /f "tokens=1-3 delims=- " %%A in ('echo %DATE%') do (set YY=%%A&SET MM=%%B&SET DD=%%C)


set /a DD=1%DD%-107
set /a MM=1%MM%-100

if  %DD% GTR 0 goto end
set /a MM=%MM%-1

if %MM% GTR 0 goto leap

set /a DD=31
set /a MM=12
set /a YY=%YY%-1
REM echo %YY%, %MM%, %DD% -> 2005, 12, 31
goto end


:leap
set /a TT=%YY%/4
set /a TT=%TT%*4
if %YY% neq %TT% goto mon%MM%
if %MM% neq 2 goto mon%MM%
set /a DD=29
goto end


:mon1
:mon3
:mon5
:mon7
:mon8
:mon10
set /a DD=31
goto end

:mon2
set /a DD=28
goto end


:mon4
:mon6
:mon9
:mon11
set /a DD=30
goto end

:end
set /a DD=%DD% + 100
set DD=%DD:~1,2%
set /a MM=%MM% + 100
set MM=%MM:~1,2%

set date1=%YY%-%MM%-%DD%
set date2=%YY%-%MM%
set date3=%DD%
set date4=%YY%%MM%%DD%

 

echo %date1%
echo.
echo %date2%
echo.
echo %date3%
echo.
echo %date4%
echo.

pause

------------------기존---------------------

기존 소스를 가지고 오늘 날짜인 2월 5일을 기준으로 일주일 전인 1월 29일을 구하려면 파란색으로 표시된 곳의 숫자를 저렇게 -107로 잡아주면 되는데

기존 소스 상태로 배치파일을 돌려보면 아무리 해도 1월 31일로 나오게됩니다.

이유는 빨간색으로 표시되어있는 mon1 ~ mon11 같이 구분되어있는 곳이 있는데 정확하진 않지만 아마 전 달의 마지막 날짜를 지정해주는 것 같습니다.

보시면 알겠지만 값이 상수로 고정되어있습니다.

저 상태면 전 달의 날짜를 구하려해도 무조건 일수가 31이나 28, 30로 고정이 되게 되버리죠..

그래서 찬찬히 둘러보다 빨간색으로 표시된 곳에 연산을 해주면 될 것 같아서 아래 소스 처럼 변경을 해봤습니다.

 

------------------변경---------------------

@echo off

for /f "tokens=1-3 delims=- " %%A in ('echo %DATE%') do (set YY=%%A&SET MM=%%B&SET DD=%%C)


set /a DD=1%DD%-107
set /a MM=1%MM%-100

if  %DD% GTR 0 goto end
set /a MM=%MM%-1

if %MM% GTR 0 goto leap

set /a DD=31
set /a MM=12
set /a YY=%YY%-1
REM echo %YY%, %MM%, %DD% -> 2005, 12, 31
goto end


:leap
set /a TT=%YY%/4
set /a TT=%TT%*4
if %YY% neq %TT% goto mon%MM%
if %MM% neq 2 goto mon%MM%
set /a DD=29
goto end


:mon1
:mon3
:mon5
:mon7
:mon8
:mon10
set /a DD=31+%DD%
goto end

:mon2
set /a DD=28+%DD%
goto end


:mon4
:mon6
:mon9
:mon11
set /a DD=30+%DD%
goto end

:end
set /a DD=%DD% + 100
set DD=%DD:~1,2%
set /a MM=%MM% + 100
set MM=%MM:~1,2%

set date1=%YY%-%MM%-%DD%
set date2=%YY%-%MM%
set date3=%DD%
set date4=%YY%%MM%%DD%

echo %date1%
echo.
echo %date2%
echo.
echo %date3%
echo.
echo %date4%
echo.

pause

------------------변경---------------------

보시는 것 처럼 기존 빨간색 부분 뒤에 +%DD% 를 붙여줬습니다.

왜 저걸 붙였는지는.. 딱 뭐다라고 설명하기가 힘드내요...

어쨌든 저렇게 수정하고 나면 기준일에서 며칠 전이든 쉽게 구할 수가 있게 됩니다..

예를 들어 10일 전에 날짜를 원하면 파란색으로 강조되어있는 -107을 -110으로 변경하시면 됩니다 ~

 

급하게 작성하는거라 정말 두서 없이 써졌는데 .. 나중에 다시 손좀 봐야겠내요..

+ Recent posts