Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Узнать даты понедельника и пятницы текущей недели

Ответить
Настройки темы
CMD/BAT - Узнать даты понедельника и пятницы текущей недели

Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


Задача стоит такая: нужно создать папку с именем дат текущей рабочей недели (пн-пт), например, 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
Подскажите, можно ли как-то оптимизировать его? или использовать другой алгоритм? А то что-то слишком большой код для такой несложной задачи

Отправлено: 16:45, 28-02-2015

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата V!RTuE:
А то что-то слишком большой код для такой несложной задачи »



Да уж, написать такой код "чистыми" средствами языка пакетных файлов у меня не хватило бы духа.



V!RTuE, попробуйте так:


Код: Выделить весь код
@echo off

for /f "tokens=1-6 delims=.-/" %%i in ('
 mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(DateAdd("D",1-WeekDay(Date,2),Date)&"."&DateAdd("D",5-WeekDay(Date,2),Date))&Close()"
') do 2>nul md "%~dp0%%k.%%j.%%i-%%n.%%m.%%l"

exit/b 0

.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:31, 28-02-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Узнать даты понедельника и пятницы текущей недели

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Добавление текущей даты в начало имени файла Orlov_Pyotr Скриптовые языки администрирования Windows 6 27-02-2013 13:30
CMD/BAT - Сранение даты из файла с текущей датой InVariable Скриптовые языки администрирования Windows 0 07-02-2012 11:53
SysTabControl32. как узнать текст текущей вкладки? Romanka AutoIt 1 04-07-2011 18:40
VBS/WSH/JS - [решено] Удаление файлов созданных ранее текущей даты на неделю KillHunter Скриптовые языки администрирования Windows 5 06-03-2009 12:23
День недели Hard Программирование и базы данных 5 23-09-2002 07:27




 
Переход