Узнать даты понедельника и пятницы текущей недели
Задача стоит такая: нужно создать папку с именем дат текущей рабочей недели (пн-пт), например, 2015.02.23-2015.02.27. Вне зависимости от того, когда был запущен батник (в пн или вс).
Получился у меня такой код:
Код:
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
For /F "Tokens=1* Delims==" %%i In ('WMIC Path Win32_LocalTime Get /Value ^| Find "="') Do (
Set V=%%j
Set $%%i=!V:~0,-1!
)
If "%$DayOfWeek%"=="0" Set $DayOfWeek=7
set /a DAY=$DayOfWeek-1
call :DateToSecs %date:~-4% %date:~-7,2% %date:~-10,2% secs
set /A adj=DAY*3600*24
set /A dsecs=secs-adj
call :SecsToDate %dsecs% yy mm dd
<nul set /p strTemp=%yy%.%mm%.%dd%->"%~dp0DATE.txt"
set /A dsecs=secs-adj+4*3600*24
call :SecsToDate %dsecs% yy mm dd
<nul set /p strTemp=%yy%.%mm%.%dd%>>"%~dp0DATE.txt"
for /f "UsebackQ" %%A IN ("%~dp0DATE.txt") do (set ThisWeek=%%~A)
echo %ThisWeek%
if not exist "%~dp0%ThisWeek%\" md "%~dp0%ThisWeek%\"
DEL /f /q "%~dp0DATE.txt"
Exit /b 0
:DateToSecs %yy% %mm% %dd% secs
SetLocal EnableExtensions
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
set /a j=j*86400
endlocal&set %4=%j%&goto :EOF
goto :EOF
:SecsToDate %secs% yy mm dd
SetLocal EnableExtensions
set /a i=%1,ss=i%%60,i/=60,nn=i%%60,i/=60,hh=i%%24,dd=i/24,i/=24
set /a a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %4=%dd%&set %3=%mm%&set %2=%yy%&goto :EOF
Подскажите, можно ли как-то оптимизировать его? или использовать другой алгоритм? А то что-то слишком большой код для такой несложной задачи :)
|