스크립트를 짜다보면 .. 종종 어제 날짜나 며칠 전 날짜를 구해야할 때가 있는데
그 때 필요한 스크립트입니다.
예전에 어디선가 퍼와서 출처는 .. 기억이 잘 나지 않아요 .. (혹 원글 작성자분께서 이 글을 보고 요청하시면 글 내릴꼐요 ~)
요즘 자주 사용하고 있는데 기존에 퍼와서 쓰고 있던 소스에 약간 문제가 있더라구요
------------------기존---------------------
@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으로 변경하시면 됩니다 ~
급하게 작성하는거라 정말 두서 없이 써졌는데 .. 나중에 다시 손좀 봐야겠내요..
' 2016년 이전 > Script' 카테고리의 다른 글
WMIC를 이용한 컴퓨터 정보 가져오기 (0) | 2014.04.08 |
---|---|
사용자 계정 생성하고 그 계정으로 작업 스케줄 등록하기 (0) | 2014.01.13 |