CMD/BAT - [решено] Копирование файлов по расписанию
-
c0t0s
CMD/BAT - [решено] Копирование файлов по расписанию
Добрый день! Нужна помощь в создании скрипта, который копировал бы файлы созданные 1 и 15 числа каждого месяца из папки "\\10.10.0.1\BackUp\Base1\" в папку "Z:\SQL\Bases1"
Возможно есть вариант удалять промежуточные бэкапы из папки \\10.10.0.1\BackUp\Base1\ , оставляя каждый месяц бэкап 1 числа, 15 числа, и 5 последних. Бэкапы создаются каждый день в формате .rar
Возможно есть вариант удалять промежуточные бэкапы из папки \\10.10.0.1\BackUp\Base1\ , оставляя каждый месяц бэкап 1 числа, 15 числа, и 5 последних. Бэкапы создаются каждый день в формате .rar
-
megaloman
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Цитата c0t0s:
Бэкапы создаются каждый день в формате .rar
Как именуются бэкапы в "\\10.10.0.1\BackUp\Base1\"? Это смесь бэкапов с разными именами по числам или это бэкапы чего-то одного?
Как ориентироваться на даты? Они как-то фигурируют в именах или надо ориентироваться исключительно на дату последнего изменения?
Бэкапы создаются каждый день в формате .rar
CMD/BAT - [решено] Копирование файлов по расписанию
Как именуются бэкапы в "\\10.10.0.1\BackUp\Base1\"? Это смесь бэкапов с разными именами по числам или это бэкапы чего-то одного?
Как ориентироваться на даты? Они как-то фигурируют в именах или надо ориентироваться исключительно на дату последнего изменения?
-
c0t0s
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Цитата 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, имя одинаковое, только число меняется.
Как именуются бэкапы в "\\10.10.0.1\BackUp\Base1\"? Это смесь бэкапов с разными именами по числам или это бэкапы чего-то одного?
CMD/BAT - [решено] Копирование файлов по расписанию
Что-то вроде Work_backup_2019_08_30_044427_1073484.bak.rar
Work_backup_2019_08_29_051354_6868648.bak.rar
- В папке только архивы с бэкапами SQL, имя одинаковое, только число меняется.
-
megaloman
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Код:
Можно написать несколько строк
Call :JobBack
в зависимости от разных префиксов бэкапов баз (то есть для разных баз)
"01 15" дни месяца копируемых и хранимых бэкапов. Может быть несколько дат, например "01 08 15 22"
5 - число неудаляемых свежих бэкапов. Можете поставить иное число.
Приведенный скрипт можете запускать планировщиком каждый день.
Повторного копирования баз за 01 15 число не будет.
Скрипт будет оставлять все исходные бэкапы за 01 и 15 числа и удалять все остальные, кроме 5 последних.
Код: Выделить всё
@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 последних.
-
DJ Mogarych
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Особо не проверял, допилите, если потребуется.
Код:
Код:
Код: Выделить всё
$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-
c0t0s
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Цитата 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"
Можно написать несколько строк
Call :JobBack
в зависимости от разных префиксов бэкапов баз (то есть для разных баз)
"01 15" дни месяца копируемых и хранимых бэкапов. Может быть несколько дат, например "01 08 15 22"
5 - число неудаляемых свежих бэкапов. Можете поставить иное число.
Приведенный скрипт можете запускать планировщиком каждый день.
Повторного копирования баз за 01 15 число не будет.
Скрипт будет оставлять все исходные бэкапы за 01 и 15 числа и удалять все остальные, кроме 5 последних.
CMD/BAT - [решено] Копирование файлов по расписанию
Спасибо за помощь, очень полезный скрипт! Я так понимаю, можно добавлять и другие 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"
-
c0t0s
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Цитата megaloman:
c0t0s, Если между "\\192.168.100.23\test2\base2\ IWZ_backup_" и "_*_*.bak.rar" дата в формате ГГГГ_ММ_ДД (например 2019_08_30) то правильно.
Код:
Call :JobBack "начало имени файла с путём" "конец имени файла с расширением" "список дат через пробел" число_хранимых_дней "Полный путь папки для копий"
Дата в имени файла должна быть в формате ГГГГ_ММ_ДД
В скрипте может быть или одна, или несколько строк с Call :JobBack ..... для разных имён баз
Один бэкап делается в таком формате: IWZ_backup_201909020500.bak - можно его как-то пристроить в данном скрипте? или нужно делать новый? Может конвертировать как-то под нужный формат при перемещении или что-то такое... Получается, на данный момент у данного архива формат ГГГГММДДЧЧММ, может поможете переписать скрипт архивирования, под нужный формат?
Вот часть кода архивирования бэкапа
Код:
Поидее нужно дописать ключ -ag+YYYY_MM_DD, но не уверен, что это прокатит.
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, но не уверен, что это прокатит.
-
megaloman
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Цитата 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
Вот вариант для разных форматов дат
[spoiler]Код: [/spoiler]
Пусть дата в разных форматах
Код:
Один бэкап делается в таком формате: IWZ_backup_201909020500.bak
CMD/BAT - [решено] Копирование файлов по расписанию
А причём здесь 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
Вот вариант для разных форматов дат
[spoiler]Код: [/spoiler]
Код: Выделить всё
@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"-
c0t0s
Re: CMD/BAT - [решено] Копирование файлов по расписанию
Цитата 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
Немного запутался сам. Сейчас буду разбираться. Огромное спасибо Вам за помощь!
А причём здесь 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
CMD/BAT - [решено] Копирование файлов по расписанию
Немного запутался сам. Сейчас буду разбираться. Огромное спасибо Вам за помощь!