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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование файлов по расписанию

Новый участник


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

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


Добрый день! Нужна помощь в создании скрипта, который копировал бы файлы созданные 1 и 15 числа каждого месяца из папки "\\10.10.0.1\BackUp\Base1\" в папку "Z:\SQL\Bases1"
Возможно есть вариант удалять промежуточные бэкапы из папки \\10.10.0.1\BackUp\Base1\ , оставляя каждый месяц бэкап 1 числа, 15 числа, и 5 последних. Бэкапы создаются каждый день в формате .rar

Отправлено: 11:39, 30-08-2019

 

Ветеран


Contributor


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

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


Цитата c0t0s:
Бэкапы создаются каждый день в формате .rar »
Как именуются бэкапы в "\\10.10.0.1\BackUp\Base1\"? Это смесь бэкапов с разными именами по числам или это бэкапы чего-то одного?
Как ориентироваться на даты? Они как-то фигурируют в именах или надо ориентироваться исключительно на дату последнего изменения?

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


Последний раз редактировалось megaloman, 30-08-2019 в 12:35.


Отправлено: 12:16, 30-08-2019 | #2



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

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


Новый участник


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

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


Цитата megaloman:
Как именуются бэкапы в "\\10.10.0.1\BackUp\Base1\"? Это смесь бэкапов с разными именами по числам или это бэкапы чего-то одного? »
Что-то вроде Work_backup_2019_08_30_044427_1073484.bak.rar
Work_backup_2019_08_29_051354_6868648.bak.rar

- В папке только архивы с бэкапами SQL, имя одинаковое, только число меняется.

Отправлено: 12:37, 30-08-2019 | #3


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	Call :JobBack "\\192.168.100.23\test1\base1\Work_backup_" "_*_*.bak.rar" "01 15" 5 "Z:\SQL\Bases1"
Exit /B

:JobBack
	For %%d In (%~3) Do >nul Xcopy /Y /D "%~120??_??_%%d%~2" "%~5\"
	FOR /F "usebackq Skip=%4 delims=" %%f IN (`2^>nul Dir "%~120??_??_??%~2" /B /A:-D /O:-N`) DO (
		Call :JobDel "%~dp1" "%~nx1" "%~dp1%%f" %3
	)
Exit /B

:JobDel
	Set "NDate=%~nx3"
	Call Set "NDate=%%NDate:*%~2=%%"
	Set "NDate=%NDate:~8,2%"
	For %%d In (%~4) Do If "%%d"=="%NDate%" Exit /B

	Del %3 
Exit /B
Можно написать несколько строк
Call :JobBack
в зависимости от разных префиксов бэкапов баз (то есть для разных баз)
"01 15" дни месяца копируемых и хранимых бэкапов. Может быть несколько дат, например "01 08 15 22"
5 - число неудаляемых свежих бэкапов. Можете поставить иное число.
Приведенный скрипт можете запускать планировщиком каждый день.
Повторного копирования баз за 01 15 число не будет.
Скрипт будет оставлять все исходные бэкапы за 01 и 15 числа и удалять все остальные, кроме 5 последних.

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

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

Отправлено: 16:11, 30-08-2019 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Особо не проверял, допилите, если потребуется.

Код: Выделить весь код
$src = "\\10.10.0.1\BackUp\Base1\"
$files = gci $path |sort CreationTime |select -SkipLast 5
$dest = "Z:\SQL\Bases1"

foreach ($file in $src) {
    if (($file.CreationTime).day -ne '1' -and ($file.CreationTime).day -ne '15') {
    Remove-Item $src\$file -Force -Recurse -confirm:$false
    }
}

& robocopy "$src" "$dest" /mir

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 22:12, 30-08-2019 | #5


Новый участник


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

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


Цитата megaloman:
Можно написать несколько строк
Call :JobBack
в зависимости от разных префиксов бэкапов баз (то есть для разных баз)
"01 15" дни месяца копируемых и хранимых бэкапов. Может быть несколько дат, например "01 08 15 22"
5 - число неудаляемых свежих бэкапов. Можете поставить иное число.
Приведенный скрипт можете запускать планировщиком каждый день.
Повторного копирования баз за 01 15 число не будет.
Скрипт будет оставлять все исходные бэкапы за 01 и 15 числа и удалять все остальные, кроме 5 последних. »
Спасибо за помощь, очень полезный скрипт! Я так понимаю, можно добавлять и другие Call :JobBack со схожим именем. Но мне нужно 1 бэкап с именем IWZ_backup_201909020500.bak настроить таким же принципом. Как нужно поменять часть с датами в данной ситуации?
Call :JobBack "\\192.168.100.23\test2\base2\ IWZ_backup_" "_*_*.bak.rar" "01 15" 5 "Z:\SQL\IWZ"

Отправлено: 15:41, 02-09-2019 | #6


Новый участник


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

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


Цитата megaloman:
c0t0s, Если между "\\192.168.100.23\test2\base2\ IWZ_backup_" и "_*_*.bak.rar" дата в формате ГГГГ_ММ_ДД (например 2019_08_30) то правильно.
Код:
Call :JobBack "начало имени файла с путём" "конец имени файла с расширением" "список дат через пробел" число_хранимых_дней "Полный путь папки для копий"
Дата в имени файла должна быть в формате ГГГГ_ММ_ДД
В скрипте может быть или одна, или несколько строк с Call :JobBack ..... для разных имён баз »
Один бэкап делается в таком формате: IWZ_backup_201909020500.bak - можно его как-то пристроить в данном скрипте? или нужно делать новый? Может конвертировать как-то под нужный формат при перемещении или что-то такое... Получается, на данный момент у данного архива формат ГГГГММДДЧЧММ, может поможете переписать скрипт архивирования, под нужный формат?
Вот часть кода архивирования бэкапа
Код: Выделить весь код
Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" a -m1 -df"
FOR %%f IN ("%From%") DO %Arc% "%To%\%%~nxf.rar" "%%f"
Поидее нужно дописать ключ -ag+YYYY_MM_DD, но не уверен, что это прокатит.

Отправлено: 16:59, 02-09-2019 | #7


Ветеран


Contributor


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

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


Цитата c0t0s:
Один бэкап делается в таком формате: IWZ_backup_201909020500.bak »
А причём здесь rar? Вы получаете IWZ_backup_201909020500.bak.rar?
Если у Вас бэкап изначально с именем IWZ_backup_201909020500.bak то rar не сделает Вам IWZ_backup_2019_09_02_0500.bak.rar
Ключ -ag+YYYY_MM_DD допишет дату перед именем, -agYYYY_MM_DD допишет дату перед .rar
Вот вариант для разных форматов дат
Код: Выделить весь код
@Echo Off
cls
	Call :JobBack "\\192.168.100.23\test1\base1\Work_backup_" "20??_??_%%%%d" "8,2" "_*_*.bak.rar" "01 15" "5" "Z:\SQL\Bases1"
	Call :JobBack "\\192.168.100.23\test1\base1\IWZ_backup_" "20????%%%%d" "6,2" "*.bak.rar" "01 15" "5" "Z:\SQL\IWZ"
Exit /B

:JobBack
	For %%d In (%~5) Do >nul Xcopy /Y /D "%~1%~2%~4" "%~7\"

	Call Set "Mask=%2"
	Call Set "Mask=%%Mask:d=??%%"

	FOR /F "usebackq Skip=%~6 delims=" %%f IN (`2^>nul Dir "%~1%Mask%%~4" /B /A:-D /O:-N`) DO (
		Call :JobDel "%~dp1" "%~nx1" "%~dp1%%f" %5 %3
	)
Exit /B

:JobDel
	Set "NDate=%~nx3"                                                    
	Call Set "NDate=%%NDate:*%~2=%%"
	Call Set "NDate=%%NDate:~%~5%%"
	For %%d In (%~4) Do If "%%d"=="%NDate%" Exit /B

	Del %3 
Exit /B
Пусть дата в разных форматах
Код: Выделить весь код
0123456789	Аргумент	Где_вырезать_день
2019_09_02	"20??_??_%%%%d"	"8,2"
20190902	"20????%%%%d"	"6,2"

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


Последний раз редактировалось megaloman, 02-09-2019 в 20:46.

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

Отправлено: 20:23, 02-09-2019 | #8


Новый участник


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

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


Цитата megaloman:
А причём здесь rar? Вы получаете IWZ_backup_201909020500.bak.rar?
Если у Вас бэкап изначально с именем IWZ_backup_201909020500.bak то rar не сделает Вам IWZ_backup_2019_09_02_0500.bak.rar
Ключ -ag+YYYY_MM_DD допишет дату перед именем, -agYYYY_MM_DD допишет дату перед .rar »
Немного запутался сам. Сейчас буду разбираться. Огромное спасибо Вам за помощь!

Отправлено: 09:30, 03-09-2019 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
Ищу программу для блокировки файлов паролями по расписанию hddmitry@twitter Хочу все знать 9 16-01-2018 16:34
CMD/BAT - Закачка файлов без перезаписи по расписанию на FTP-сервер через консоль lexxstr Скриптовые языки администрирования Windows 0 08-02-2014 17:51
CMD/BAT - [решено] Копирование файла по расписанию и его отправка по почте LokkyZ Скриптовые языки администрирования Windows 8 03-10-2011 16:49
Блог - Удаление временных файлов скриптом по расписанию Vadikan Microsoft Windows 7 0 26-05-2011 11:30




 
Переход