Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


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

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


Цитата xan08:
Первый скрипт устраивает полностью, за исключением номера дня в названии папки D_5_Пятница, можно ли это поправить? »
В коде всё уже содержится. Минимальная поправка: было
Код: Выделить весь код
rem	FOR /F "tokens=%DWeek% delims= " %%i IN ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") DO Set "DWeek=%%i"
	FOR /F "tokens=%DWeek% delims= " %%i IN ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") DO Set "DWeek=%DWeek%_%%i"
сделайте
Код: Выделить весь код
	FOR /F "tokens=%DWeek% delims= " %%i IN ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") DO Set "DWeek=%%i"
rem	FOR /F "tokens=%DWeek% delims= " %%i IN ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") DO Set "DWeek=%DWeek%_%%i"
Кстати, оказывается понятие "номер недели в году" не так просто, как я по наивности полагал. Я считаю, что первый день недели - это неделя с 1 января. Если Вас это устраивает, то всё в порядке.
Цитата xan08:
кратенько, что происходит в этой секции »
Я уже писАл, что использовал известные приёмы для работы с датами
Я взял готовые коды, с которыми когда-то давно столкнулся, не берусь вспомнить, где. Оформил их в виде процедур, чтобы использовать по мере надобности и не изобретать велосипед. Можно найти исходные формулы, но лень.
Вот пример использования этих процедур
Код: Выделить весь код
@Echo Off
cls
	Call :JdayGcal 01 01 2019 "N1"
	Call :JdayGcal 05 07 2019 "NX"
	
	Set /A NY=%NX%-%N1%+1
	Echo Номер дня в году %NY%

	Call :NdayInWeek 05 07 2019 "NW"
	Echo Номер дня недели %NW%
Pause
GoTo :Eof

rem Юлианский день по григорианскому календарю дд мм гггг имя_переменной
:JdayGcal
SetLocal
	Set "D=0%1" &Set "M=0%2"
	Set /A D=1%D:~-2%-100,M=1%M:~-2%-100
	Set /A A=(14-%M%)/12, Y=%3+4800-A, M=%M%+12*A-3
	EndLocal &Set /A %~4=(%D%+(153*%M%+2)/5+365*%Y%+%Y%/4-%Y%/100+%Y%/400-32045)
Exit /B

rem Номер дня в неделе дд мм гггг имя_переменной
:NdayInWeek
SetLocal
	Set "D=0%1" &Set "M=0%2"
	Set /A D=1%D:~-2%-100,M=1%M:~-2%-100  
	Set /A i=(%3-1901)*365 + (%3-1901)/4 + %D% + (!(%3 %% 4))*(!((%M%-3)^&16))
	EndLocal &Set /A %~4=(%i%+(%M%-1)*30+2*(!((%M%-7)^&16))-1+((65611044^>^>(2*%M%))^&3))%%7+1
Exit /B
На основе этих процедур решал и Вашу задачу. Увы, прямую формулу для определения номера недели в году не нашел.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 05-07-2019 в 16:36.

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

Отправлено: 11:28, 05-07-2019 | #7