CMD/BAT - Выгрузка по рабочим дням

Ответить
Аватара пользователя
kddkda

CMD/BAT - Выгрузка по рабочим дням

Сообщение kddkda »

Добрый день.



Есть такая задача выгружать архив клиентов на FTP, 15 и 30 числа, но если эти дни приходятся на праздник или выходной то выгружаем ранее.

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

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

Также есть проблема с Февралем там 28 дней, то есть выгрузка 28 или ранее, если попадает выходной на 28.



Пример:

Сегодня 28 число, Пятница, 30 число попадает на Воскресение, но нужно выгрузить сегодня.



Взял код из темы "CMD/BAT - [решено] Переменная Дня недели" все хорошо но не соображу какой алгоритм проверки сделать, подскажите кто чем может.
Аватара пользователя
megaloman

Re: CMD/BAT - Выгрузка по рабочим дням

Сообщение megaloman »

kddkda, С выходными - задача решаемая. (кстати - что такое "выходной" - только воскресенье?) Но насчёт праздников ... Не знаю, какие у Вас законы, но у нас частенько перед праздниками практикуется перенос рабочих дней, чтобы увеличить число нерабочих дней вподряд (тут уж понятие "выходные" может извращаться как угодно). У нас есть такой праздник -Пасха, а за ним и Радуница(у нас нерабочий день), который в каждом году приходится на свой день.

ИМХО, решение задачи - задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать.

Либо изменить постановку задачи: 1 и 15 (или 14) число есть всегда.

Логика 1 числа: если нет архива текущего месяца - сделать его.

Логика 15 числа: если за текущий месяц нет архива за число >= 15, делаем его.

Наверное, в этом случае на каждую выгрузку надо будет создать лог-файл с именем по дате выгрузки.



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

Re: CMD/BAT - Выгрузка по рабочим дням

Сообщение tiss42rus »

Цитата megaloman:



задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать.
CMD/BAT - Выгрузка по рабочим дням




+добавить напоминалку о том что год заканчивается надо батник изменить
Аватара пользователя
alpap

Re: CMD/BAT - Выгрузка по рабочим дням

Сообщение alpap »

Цитата tiss42rus:



надо батник изменить
CMD/BAT - Выгрузка по рабочим дням




скорее файл txt-список дат, запуск перед концом года задачей из планировщика.
Аватара пользователя
Elven

Re: CMD/BAT - Выгрузка по рабочим дням

Сообщение Elven »

Цитата megaloman:



задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать.
CMD/BAT - Выгрузка по рабочим дням




А больше чем на год и не получится. Учитывая количество праздников, которые нужно учесть, переносы рабочих дней, которые меняются год от года. Даже на год затруднительно будет составить, но это еще худо-бедно возможно. Как шаг к упрощению ежегодной работы - список дней запуска (или список выходных, что нелогично ибо их будет сильно больше) хранить не в самом батнике, а в отдельном файле, и редактировать уже его.

Вариант проверки при таком раскладе будет, к примеру, таким:





файл с датами запуска.txt

[spoiler]Код:
[/spoiler]

Код: Выделить всё

01.01.2018
15.01.2018
01.02.2018
15.02.2018









проверка

[spoiler]Код:
[/spoiler]

Код: Выделить всё

findstr %date% "файл с датами запуска.txt" && (
echo выполняем какие-то действия) || (
echo не выполняем ничего)
Аватара пользователя
megaloman

Re: CMD/BAT - Выгрузка по рабочим дням

Сообщение megaloman »

Вот батник с расписанием. Меня напрягает, если батник будет ссылаться на какой-то текстовый файл. Этот батник можно таскать куда угодно, не задумываясь о сопутствующем файле

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
rem          1        1        2        2        3        3        4        4        5        5        6        6        7        7        8        8        9        9        10       10       11       11       12       12
Set Schedule=20180115 20180131 20180215 20180228 20180315 20180330 20180413 20180430 20180515 20180531 20180615 20180629 20180715 20180730 20180815 20180831 20180914 20180928 20181015 20181030 20181115 20181130 20181214 20181228 
Set /A Log=-1
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
FOR %%i IN (%Schedule%) DO Set "MPlan=%%i" &Call :Logic %%@Tdate:~0,8%% %%@Tdate:~0,6%% %%i %%MPlan:~0,6%%
If %Log% EQU 0 Echo Nothing to do &Exit /B 0
If %Log% EQU -1 Call :ErrorDo %@Tdate:~0,6%% &Exit /B 1
If %Log% EQU 1  Call :UpLoad 
Exit /B 0
:Logic
	If %Log% LEQ 0 If %2==%4 Set /A Log=0
	If %1==%3 Set /A Log=1
GoTo :Eof
:ErrorDo
	Echo No scheduled for this month %1
	Pause
GoTo :Eof
:UpLoad
	Echo Upload backup
GoTo :Eof

Если за текущий месяц нет плана выгрузки, вызывается процедура :ErrorDo для аварийного сообщения. Сейчас там банальное Echo, хотя можно придумать способ оповещения по сети или через E-Mail

Если надо сделать выгрузку, можно её вставить в процедуру :UpLoad, сейчас там просто Echo

Для получения текущей даты применил WMIC, чтобы не задумываться о выбранном формате даты в системе
Аватара пользователя
kddkda

Re: CMD/BAT - Выгрузка по рабочим дням

Сообщение kddkda »

Доброе Утро.



Спасибо за ответы, извиняюсь что долго не отвечал.



Мысль такая появилась, проверяем ТДата +1, если выходной (Суббота или Воскресенье) или праздник, то выгрузить сегодня.

Так как все государственные праздники известны то их можно забить один раз, а вот дни переноса праздничных можно заполнять через внешний TXT файл в начале года так как все переносы проходят через официальные документы в начале года.



megaloman, спасибо за код.



Рабочий вариант выложу тут в теме, надеюсь найду время за выходные.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»