일괄 처리 파일에서 날짜 계산을 위해 율리우스 날짜로 날짜를 변환해야합니다. 여기에 두 가지 기능이 있습니다. 하나는 현재 날짜를 얻고 하나는 현재 날짜를 계산합니다.
@echo off
setlocal
REM Get the current date
REM Will return variables YY, YYYY, MM, DD, HH, Min and Sec
Call :GetDateTime
REM Add or Subtract from the current date
REM Must use + or - symbol
REM Revised date will be assigned to RetVar
Call :AddSubDate %YYYY% %MM% %DD% -2 past
echo Past : %past%
pause
GOTO :EOF
:AddSubDate Year Month Day <+/-Days> RetVar
setlocal & set a=%4
set "yy=%~1"&set "mm=%~2"&set "dd=%~3"
set /a "yy=10000%yy% %%10000,mm=100%mm% %% 100,dd=100%dd% %% 100"
if %yy% LSS 100 set /a yy+=2000 &rem Adds 2000 to two digit years
set /a JD=dd-32075+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4
if %a:~0,1% equ + (set /a JD=%JD%+%a:~1%) else set /a JD=%JD%-%a:~1%
set /a L= %JD%+68569, N= 4*L/146097, L= L-(146097*N+3)/4, I= 4000*(L+1)/1461001
set /a L= L-1461*I/4+31, J= 80*L/2447, K= L-2447*J/80, L= J/11
set /a J= J+2-12*L, I= 100*(N-49)+I+L
set /a YYYY= I, MM=100+J, DD=100+K
set MM=%MM:~-2% & set DD=%DD:~-2%
set ret=%YYYY: =%%MM: =%%DD: =%
endlocal & set %~5=%ret%
exit /b
:GetDateTime Year Month Day Hour Minute Second
@echo off & setlocal
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
(ENDLOCAL
set "YY=%YY%"
set "YYYY=%YYYY%"
set "MM=%MM%"
set "DD=%DD%"
set "HH=%HH%"
set "Min=%Min%"
set "Sec=%Sec%"
)
exit /b
슬프게도 순수 배치에서 날짜/시간을 계산할 방법이 없습니다. 일괄 처리 및 일괄 처리 만 사용해야하는 경우 [this] (https://stackoverflow.com/questions/11210997/windows-console-date-math?noredirect=1&lq=1)를 읽어보십시오.하지만 Powershell 또는 [embedded vbs ] (https://stackoverflow.com/questions/22191084/how-to-get-3-days-past-date-from-current-date-using-batch-file?rq=1) – Stephan
날짜/시간 계산의 경우 JavaScript, VBScript 또는 PowerShell과 같은 다른 언어에서 이러한 함수를 빌려줄 것입니다. 어쨌든,이 사이트를 검색하면 많은 예제를 찾을 수 있습니다 ... – aschipfl