|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Доработка и проверка скрипта архивирования |
|
CMD/BAT - [решено] Доработка и проверка скрипта архивирования
|
Пользователь Сообщения: 95 |
Профиль | Отправить PM | Цитировать
Добрый день уважаемые форумчане. Прошу Вашей помощи в проверке и доработке файла .bat так как сам я не очень силен в этой области, но что то нашел в интернете что то подправил сам. И так задача:
Есть 2 сервера: 1 хранятся Бд SQL и 1C. Путь D:\Programs\1C и резервные копии БД SQL D:\MSSQL\MSSQL\Backup\21_00. Есть промежуточные папка D:\ARHIV\ARHIV_1C и D:\ARHIV\ARHIV_BD 2 сервер на котором должны храниться копии сервера 1. Путь \\Server-domain\d$\ARHIV\ARHIV_BD и \\Server-domain\d$\ARHIV\ARHIV_1C . Нужно сделать так что бы каждый день на сервере 1 делались архивы 1С и BD и копировались на сервер 2. При этом архивы на сервере 1 должны храниться не более 7 дней. Сделал такой исполняемый файл и сохранил его как start.bat: код
D:
cd D:\Programs\1C rar a -agYYYY.MM.DD -m5 -r -x D:\ARHIV\ARHIV_1C\backup_.rar *.* cd D:\MSSQL\MSSQL\Backup\21_00 rar a -agYYYY.MM.DD -m5 -r -x D:\ARHIV\ARHIV_BD\backup_.rar *.* copy /Y D:\ARHIV\ARHIV_1C\*.rar \\Server-domain\d$\ARHIV\ARHIV_1C\*.rar copy /Y D:\ARHIV\ARHIV_BD\*.rar \\Server-domain\d$\ARHIV\ARHIV_BD\*.rar Forfiles /P D:\ARHIV\ARHIV_1C /S /M *.* /D -7 /C "cmd /c del /Q @path" Forfiles /P D:\ARHIV\ARHIV_BD /S /M *.* /D -7 /C "cmd /c del /Q @path" Скажите все ли тут так? можно ли что то облегчить? И как к моей задаче сделать Log файл. Заранее всем спасибо за советы и участие в теме! P.S. Знаю что команды forfiles и copy можно заменить командой robocopy, но как понять не могу. Хотя возможно я ошибаюсь что их можно заменить... |
|
Отправлено: 13:16, 24-01-2018 |
Пользователь Сообщения: 95
|
Профиль | Отправить PM | Цитировать Друзья давайте по активнее. Правда нужна помощь.
|
Отправлено: 09:32, 25-01-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата igor.kinma:
Резервное копирование делают на случай сбоев в работе. Ваш "скрипт" никак не учитывает возможные сбои. |
|
Отправлено: 10:19, 25-01-2018 | #3 |
Пользователь Сообщения: 95
|
Профиль | Отправить PM | Цитировать Busla спасибо за помощь.
|
Отправлено: 11:44, 25-01-2018 | #4 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать igor.kinma,
Цитата igor.kinma:
Яволь, майн генераль! :)
@Echo Off Set "Arc="%ProgramFiles%\WinRar\Rar.exe"" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d" Set "DArc=%TDate:~0,4%.%TDate:~4,2%.%TDate:~6,2% Call :Backup "Z:\Programs\1C" "Z:\ARHIV\ARHIV_1C" "Backup_%DArc%.rar" "Z:\Server-domain\d$\ARHIV\ARHIV_1C" "Z:\ARHIV\ARHIV_1C\%DArc%.log" Call :Backup "Z:\MSSQL\MSSQL\Backup\21_00" "Z:\ARHIV\ARHIV_BD" "Backup_%DArc%.rar" "Z:\Server-domain\d$\ARHIV\ARHIV_BD" "Z:\ARHIV\ARHIV_BD\%DArc%.log" GoTo :Eof :Backup >>%5 ( Echo ++++++ Echo ++++++ %Date% %Time% %1 >nul %Arc% a -m3 -r -ep1 "%~2\%~3" "%~1\*.*" If Not Exist "%~2\%~3" ( Echo !!!!!! Archive not created "%~2\%~3" ) Else ( Echo ++++++ Files In Archives "%~2\%~3" Echo: %Arc% lb "%~2\%~3" Echo: Echo ++++++ Copy arhives from %2 to %4 Echo: Xcopy /D /Y /F "%~2\*.rar" "%~4\" Echo: Echo ++++++ Delete arhives from %2 Echo: FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x3" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x5" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" ) ) GoTo :Eof Я не знаю объёма Ваших баз, ИМХО, ключ -m5 плох: не даёт существенного выигрыша в объеме, но зато при больших базах тратится громадное время. Я сделал -m3, но Вашу свободу никто не смеет ограничивать. Цитата igor.kinma:
Цитата igor.kinma:
Цитата igor.kinma:
|
|||||
------- Последний раз редактировалось megaloman, 25-01-2018 в 15:35. Отправлено: 15:13, 25-01-2018 | #5 |
Пользователь Сообщения: 95
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Помогите пожалуйста неумному в доработке Вашего скрипта или создании дополнительного: Базы данных 1С должны архивироваться каждый день в D:\ARHIV\1C и иметь вид Backup(1C)_дата.rar Базы данных SQL должны архивироваться каждый день в D:\ARHIV\BD с заменой архива. Почему именно с заменой? На SQL сервере настроено резервное копирование БД каждый день в 21:00 с пн по пт. с удалением файлов старше 6 дней. Тоесть я полагаю что данный архив должен называться Backup(SQL)_update.rar и каждый день в него должны добавляться недостающие файлы, а в пятницу после очередного пополнения, он должен быть переименован в Backup(SQL)_дата.rar. Таким образом он будет содержать в себе файлы SQL баз с пн по пт. (всего 5 файлов) Ну и соответственно все это дело должно каждый день копироваться на сервер 1. по следующему принципу: Архив 1C каждый день с названием Backup(1C)_дата.rar Архив SQL баз каждый день с названием Backup(SQL)_update.rar, а в пятницу Backup(SQL)_дата.rar и после копирования, если оно удачно удалить файл Backup(SQL)_update.rar И так же должно сохраниться условие хранение 7 архивов. P.S Если для всего этого необходимо несколько файлов .bat то ни чего страшного главное что бы все это работало. Заранее Вам огромное спасибо. |
|
Последний раз редактировалось igor.kinma, 06-02-2018 в 22:16. Отправлено: 14:08, 06-02-2018 | #6 |
Пользователь Сообщения: 95
|
Профиль | Отправить PM | Цитировать Немного подумав на ум приходит 3 .bat файла.
Архив и перенос Баз 1С
@Echo Off Set "Arc="%ProgramFiles%\WinRar\Rar.exe"" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d" Set "DArc=%TDate:~0,4%.%TDate:~4,2%.%TDate:~6,2% Call :Backup "D:\Programs\1C" "D:\ARHIV\1C" "Backup(1С)_%DArc%.rar" "\\Server-domain\d$\ARHIV\1C" "D:\ARHIV\LOG\1C_%DArc%.log" GoTo :Eof :Backup >>%5 ( Echo ++++++ Echo ++++++ %Date% %Time% %1 >nul %Arc% a -m3 -r -ep1 "%~2\%~3" "%~1\*.*" If Not Exist "%~2\%~3" ( Echo !!!!!! Archive not created "%~2\%~3" ) Else ( Echo ++++++ Files In Archives "%~2\%~3" Echo: %Arc% lb "%~2\%~3" Echo: Echo ++++++ Copy arhives from %2 to %4 Echo: Xcopy /D /Y /F "%~2\*.rar" "%~4\" Echo: Echo ++++++ Delete arhives from %2 Echo: FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x3" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x5" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" ) ) GoTo :Eof Архивирование и перенос SQL
@Echo Off Set "Arc="%ProgramFiles%\WinRar\Rar.exe"" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d" Set "DArc=%TDate:~0,4%.%TDate:~4,2%.%TDate:~6,2% Call :Backup "D:\MSSQL\MSSQL\Backup\21_00" "D:\ARHIV\BD" "Backup(SQL)_update.rar" "\\Server-domain\d$\ARHIV\BD" "D:\ARHIV\LOG\SQL_%DArc%.log" GoTo :Eof :Backup >>%5 ( Echo ++++++ Echo ++++++ %Date% %Time% %1 >nul %Arc% u -m3 -r -ep1 "%~2\%~3" "%~1\*.*" If Not Exist "%~2\%~3" ( Echo !!!!!! Archive not created "%~2\%~3" ) Else ( Echo ++++++ Files In Archives "%~2\%~3" Echo: %Arc% lb "%~2\%~3" Echo: Echo ++++++ Copy arhives from %2 to %4 Echo: Xcopy /D /Y /F "%~2\*.rar" "%~4\" Echo: Echo ++++++ Delete arhives from %2 Echo: FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x3" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x5" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" ) ) GoTo :Eof Далее нужен 3 скрипт который будет переименовывать архив Backup(SQL)_update.rar в Backup(SQL)_дата.rar, копировать его на сервер и удалять от туда Backup(SQL)_update.rar Переименование и копирование архива
@Echo Off FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d" Set "DArc=%TDate:~0,4%.%TDate:~4,2%.%TDate:~6,2% RENAME D:\ARHIV\BD\Backup(SQL)_update.rar Backup(SQL)_%DArc%.rar xcopy D:\ARHIV\BD\*.rar \\Server-domain\d$\ARHIV\BD /H /Y /C erase \\Server-domain\d$\ARHIV\BD\Backup(SQL)_update.rar |
Последний раз редактировалось igor.kinma, 06-02-2018 в 14:42. Отправлено: 14:25, 06-02-2018 | #7 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Немного подумав, на ум приходит доработка 1 командного файла
@Echo Off Set "Arc="%ProgramFiles%\WinRar\Rar.exe"" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d" Set "DArc=%TDate:~0,4%.%TDate:~4,2%.%TDate:~6,2% Call :DayOfWeek "DOW" Call :Backup "Z:\Programs\1C" "Z:\ARHIV\ARHIV_1C" "Backup(1C)_%DArc%.rar" "Z:\Server-domain\d$\ARHIV\ARHIV_1C" "Z:\ARHIV\ARHIV_1C\%DArc%.log" If "%DOW%"=="5" ( >>"Z:\ARHIV\ARHIV_BD\%DArc%.log" ( Echo ++++++ Echo ++++++ %Date% %Time% "Z:\MSSQL\MSSQL\Backup\21_00" Echo ++++++ Ren "Z:\ARHIV\ARHIV_BD\Backup(SQL)_update.rar" "Backup(SQL)_%DArc%.rar" Ren "Z:\ARHIV\ARHIV_BD\Backup(SQL)_update.rar" "Backup(SQL)_%DArc%.rar" 2>&1 ) Call :Backup "Z:\MSSQL\MSSQL\Backup\21_00" "Z:\ARHIV\ARHIV_BD" "Backup(SQL)_%DArc%.rar" "Z:\Server-domain\d$\ARHIV\ARHIV_BD" "Z:\ARHIV\ARHIV_BD\%DArc%.log" ) Else ( Call :Backup "Z:\MSSQL\MSSQL\Backup\21_00" "Z:\ARHIV\ARHIV_BD" "Backup(SQL)_update.rar" "Z:\Server-domain\d$\ARHIV\ARHIV_BD" "Z:\ARHIV\ARHIV_BD\%DArc%.log" ) rem 1 2 3 4 5 GoTo :Eof :Backup >>%5 ( Echo ++++++ Echo ++++++ %Date% %Time% %1 >nul %Arc% u -m3 -r -ep1 "%~2\%~3" "%~1\*.*" If Not Exist "%~2\%~3" ( Echo !!!!!! Archive not created "%~2\%~3" ) Else ( Echo ++++++ Files In Archives "%~2\%~3" Echo: %Arc% lb "%~2\%~3" Echo: Echo ++++++ Copy arhives from %2 to %4 Echo: Xcopy /D /Y /F "%~2\*.rar" "%~4\" Echo: Echo ++++++ Delete arhives from %2 Echo: FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x3" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f" FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~dp5*%~x5" /B /A:-D /O:-D /T:C`) DO Del /S "%~dp5%%f" ) ) GoTo :Eof :DayOfWeek rem Выдаёт номер дня недели в переменную имя которой указано в вызове в кавычках Set /A YYYY=%date:~6,4%, MM=1%date:~3,2%-100, DD=1%date:~0,2%-100 Set /A %~1=((%YYYY%-1901)*365 + (%YYYY%-1901)/4 + %DD% + (!(%YYYY% %% 4))*(!((%MM%-3)^&16))+(%MM%-1)*30+2*(!((%MM%-7)^&16))-1+((65611044^>^>(2*%MM%))^&3))%%7+1 GoTo :Eof Цитата igor.kinma:
Так, как описали Вы, архиватор заново будет архивировать все файлы, накопившиеся за неделю - лишние траты времени и места. И вообще, я заменил команду a в RAR на u, чтобы не тратить время на переархивирование старых файлов в Backup(SQL)_update.rar. Определение дня недели не помню где подсмотрел |
|
------- Последний раз редактировалось megaloman, 07-02-2018 в 13:53. Отправлено: 13:08, 07-02-2018 | #8 |
Пользователь Сообщения: 95
|
Профиль | Отправить PM | Цитировать megaloman, Огромное Вам человеческое спасибо!Запустил Ваш скрипт в планировщик с пн по пт в 21:30. Будем тестировать.
Но есть один вопрос. Копирование на \Server-domain\ идет всех файлов из папок Z:\ARHIV\ARHIV_BD и Z:\ARHIV\ARHIV_1C или только последних которые создались? |
Отправлено: 15:43, 07-02-2018 | #9 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать igor.kinma, 1C архивируется, а затем и копируется всё заново. Если не устраивает, то надо наманер как для баз SQL именовать архив без привязки к дате, обновлять его (при этом будут переархивированы обновлённые файлы и добавлены новые, а затем уже копировать этот файл с признаком даты в имени. Естественно, при этом в архиве будут все файлы. Вы не объяснили, что архивируется и можно ли после архивирования исходные файлы удалить. Если это бэкапы - вполне можно. И даже нужно, иначе будем постоянно архивировать всё, включая бэкапы столетней давности. Всего-то в Rar добавить ключ. Тогда получим архивы только свежих файлов. А вот если это рабочие базы .... Увы.
С sql мне понятнее. Там бэкапы, да и то, после успешного архивирования я бы их удалял (соответствующий ключ в rar). В Вашей первоначальной постановке архивируется всё. Иного Вы не озвучивали. Если что-то не устраивает, постарайтесь четче сформулировать Ваши хотелки Может быть можно как-то привязываться к именам исходных файлов? |
------- Последний раз редактировалось megaloman, 07-02-2018 в 16:12. Отправлено: 16:07, 07-02-2018 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доработка скрипта на Bash | parrabol | Программирование в *nix | 4 | 31-10-2016 14:45 | |
Java - маленькая доработка скрипта СТАТИСТИКА | Kos2an | Программирование и базы данных | 0 | 04-10-2013 23:06 | |
VBS/WSH/JS - доработка скрипта | ZeVSalt | Программирование и базы данных | 3 | 23-09-2011 22:33 | |
Проверка параметров запуска скрипта | morgan1991 | AutoIt | 2 | 03-03-2009 00:43 |
|