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

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

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

Аватара для Charg

Ветеран


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


Конфигурация

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


Изменения
Автор: Charg
Дата: 15-07-2015
Собственно есть такой батник, который архивирует (с помощью 7z) нужные мне папки, затем подключает как сетевой диск нужную мне папку с nas-сервера и копирует архив туда (может как-то попроще можно? а то выглядит как костыль...)
Скрытый текст

echo off
:START_COMPRESS

ECHO started at %time%, %date%

"C:\Program Files\7-Zip\7z.exe" a -y -ssw -t7z -mx5 "C:\register centr\backups\%date:~0,2%.7z" "C:\register centr\BASE" "C:\register centr\IN" "C:\register centr\OUT"

ECHO done at %time%, %date%

IF %errorlevel%==0 goto START_COPYING
ELSE goto START_COMPRESS

:START_COPYING

net use p: \\backup\BACKUPS\Register_secretar
copy "C:\register centr\backups\%date:~0,2%.7z" p:\ /Y
net use p: /delete


Вопросов несколько:
1. Как сделать так чтобы записать лог всего этого? Можно конечно сделать второй батник и его запускать вот так "D:\первыйбатник.bat">d:\log_%date%.txt но тогда во время работы самого батника (первого) ничего не будет визуально заметно, а там сам 7z пишет в командную строку прогресс архивирования в процентах, хотелось бы это видеть.
2. Какую кодировку нужно использовать (и что сделать чтобы ее "применить") чтобы стандартный виндовый (хр) блокнот нормально читал логи? Дело в том что некоторые архивируемые файлы имеют русские названия, соответственно кириллица превращается в кракозябры.
3. Суть батника в том что он каждый день будет создавать архивы 01.7z, 02.7z и т.д. по дням, и соответственно когда наступит первое число следующего месяца - нужно архив перезаписать. Это по дефолту делается или нужно указать какие-то дополнительные параметры?
4. Если присутствует "говнокод" - просьба на это указать, я пока учусь и соответственно хотелось бы учиться делать правильно а не абы работало

Отправлено: 16:58, 13-07-2015

 

Аватара для Elven

Ветеран


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

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


3. Судя по ключу /Y архив перезапишет существующий при копировании. Больше можно ничего ничего не указывать.
2. 866
1. Что именно нужно логировать? Если достаточно времени/даты начала/завершения то это добавление нескольких ECHO в файл лога. например:
Код: Выделить весь код
ECHO started at %time%, %date% >>d:\log_%date%.txt
Да и изначальный вариант с
Цитата Charg:
"D:\первыйбатник.bat">d:\log_%date%.txt »
весьма даже нормален. Неужели автоматизация процесса делается только для того чтобы внимательно созерцать как этот процесс автоматизирован?
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:46, 13-07-2015 | #2



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

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


Ветеран


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

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


Цитата Charg:
может как-то попроще можно? »
Можно не подключать диск, а сразу копировать по UNC-пути. Если объём небольшой, то можно сразу туда и архивировать.

Цитата Charg:
1. Как сделать так чтобы записать лог всего этого? Можно конечно сделать второй батник и его запускать вот так "D:\первыйбатник.bat">d:\log_%date%.txt но тогда во время работы самого батника (первого) ничего не будет визуально заметно, а там сам 7z пишет в командную строку прогресс архивирования в процентах, хотелось бы это видеть. »
Надо полагать, через большие костыли в виде «tee.exe».

Цитата Charg:
2. Какую кодировку нужно использовать (и что сделать чтобы ее "применить") чтобы стандартный виндовый (хр) блокнот нормально читал логи? Дело в том что некоторые архивируемые файлы имеют русские названия, соответственно кириллица превращается в кракозябры. »
Надо не использовать «стандартный виндовый» Блокнот, а нечто другое, понимающее кодировку OEM/866. В принципе, Вы можете управлять кодировкой вывода 7-zip, но тогда вовсе получится каша из 866 и 1251.

Цитата Charg:
3. Суть батника в том что он каждый день будет создавать архивы 01.7z, 02.7z и т.д. по дням, и соответственно когда наступит первое число следующего месяца - нужно архив перезаписать. Это по дефолту делается или нужно указать какие-то дополнительные параметры? »
Будут «молча» обновлены файлы в уже существующем архиве. Отсутствующие файлы не будут удалены из архива.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:55, 13-07-2015 | #3


Аватара для Charg

Ветеран


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

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


Цитата Elven:
Что именно нужно логировать? Если достаточно времени/даты начала/завершения то это добавление нескольких ECHO в файл лога. например: »
Ну в идеале я хочу прикрутить логирование вот так:
Код: Выделить весь код
IF %errorlevel%==0 goto :дальше
ELSE >вот тут пишем BAD_log_%date%.txt
Но не знаю как. А вообще само содержание лога в случае успеха не важно, а вот если что-то пошло не так - хотелось бы видеть то что пишет сам 7z. Ну или net\copy если ошибка на этих этапах.


Цитата Elven:
Неужели автоматизация процесса делается только для того чтобы внимательно созерцать как этот процесс автоматизирован? »
Нет, автоматизация делается для того чтобы не делать вручную, ибо лень (кэп). А процентики нужны чтоб юзер видел сколько еще осталось (планируется делать бэкап каждый день за пол часа до конца рабочего дня, делается все минуту-две максимум (итоговый архив <5мб) но все же.

Цитата Iska:
Можно не подключать диск, а сразу копировать по UNC-пути. Если объём небольшой, то можно сразу туда и архивировать. »
Помнится где-то читал что так делать не рекомендуется (не помню уже какие аргументы были против).
Цитата Iska:
Будут «молча» обновлены файлы в уже существующем архиве. Отсутствующие файлы не будут удалены из архива. »
Не доверяю я этим "умным" обновлениям... получается придется вручную удалять (IF EXIST "d:\archive.7z" ^ DEL "d:\archive.7z" - вроде так?)

Отправлено: 22:56, 13-07-2015 | #4


Ветеран


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

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


Цитата Charg:
Помнится где-то читал что так делать не рекомендуется (не помню уже какие аргументы были против). »
Не встречал такого.

Цитата Charg:
получается придется вручную удалять »
Я не могу ничего сказать, не зная задач, целей и плана Вашего расписания резервирования.

Цитата Charg:
Ну в идеале я хочу прикрутить логирование вот так: »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sConstPath=C:\register centr

"%ProgramFiles%\7-Zip\7z.exe" a -y -ssw -t7z -mx5 "\\backup\BACKUPS\Register_secretar\%date:~3,2%.7z" "%sConstPath%\BASE" "%sConstPath%\IN" "%sConstPath%\OUT2" || >>"BAD_log_%date%.txt" echo Error: !ErrorLevel!

endlocal
exit /b 0
Цитата Charg:
(планируется делать бэкап каждый день за пол часа до конца рабочего дня, делается все минуту-две максимум (итоговый архив <5мб) »
Назначьте исполнение пакетного файла на Logoff посредством групповой политики. И не понадобится «-ssw».
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:26, 14-07-2015 | #5


Аватара для Charg

Ветеран


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

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


Цитата Iska:
Я не могу ничего сказать, не зная задач, целей и плана Вашего расписания резервирования. »
У секретаря есть реестр документов, который написан хз кем и когда. Резервное копирование там не реализовано совсем, не говоря уже об автоматическом. Руководство, как это обычно и бывает, очень удивилось, услышав что если навернется компьютер секретаря - весь их реестр за 3 года пропадет без какого либо шанса на восстановление. Вот я его и хочу реализовать батничек который будет все это дело архивировать.

Цитата Iska:
@echo off
setlocal enableextensions enabledelayedexpansion
set sConstPath=C:\register centr
"%ProgramFiles%\7-Zip\7z.exe" a -y -ssw -t7z -mx5 "\\backup\BACKUPS\Register_secretar\%date:~0,2%.7z" "%sConstPath%\BASE" "%sConstPath%\IN" "%sConstPath%\OUT" || >>"BAD_log_%date%.txt" echo Error: !ErrorLevel!
endlocal
exit /b 0 »
Хмм, спасибо, удобно получилось.
А exit /b 0 зачем? После архивирования еще ж нужно в этом же батнике архив переместить на nas, а exit /b 0 заканчивает работу батник при %errorlevel%==0, насколько я понял из справки?

Цитата Iska:
Назначьте исполнение пакетного файла на Logoff посредством групповой политики. И не понадобится «-ssw». »
Событие Logoff это выключение питания или завершение сеанса пользователя? Судя по названию скорее второе но все-таки. И как это сделать?

Последний раз редактировалось Charg, 15-07-2015 в 11:19.


Отправлено: 09:53, 14-07-2015 | #6


Ветеран


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

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


Цитата Charg:
А exit /b 0 зачем? »
Это установка значения errorlevel для родительского процесса.

Цитата Charg:
После архивирования еще ж нужно в этом же батнике архив переместить на nas »
Разве:
Код: Выделить весь код
"%ProgramFiles%\7-Zip\7z.exe" a -y -ssw -t7z -mx5 "\\backup\BACKUPS\Register_secretar\%date:~3,2%.7z" "%sConstPath%\BASE" "%sConstPath%\IN" "%sConstPath%\OUT2" || >>"BAD_log_%date%.txt" echo Error: !ErrorLevel!
?! Или «\\backup» — это ещё не NAS?

Цитата Charg:
Событие Logoff это выключение питания или завершение сеанса пользователя? »
Завершение сеанса. На исполнение всех назначенных на это событие программ, скриптов и пакетных файлов отводится не более 10 минут (и, кажись, до 15 минут на новых ОС; в любом случае, это время также управляется групповой политикой).

Цитата Charg:
И как это сделать? »
Назначение сценариев выхода пользователя из системы

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


Аватара для Charg

Ветеран


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

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


Цитата Iska:
?! Или «\\backup» — это ещё не NAS? »
А, он самый, проглядел.

Лог только получается какой-то бесполезный. Изменил для теста путь чтоб архив писался на \\backup1 (такого устройства естественно нет) и изменил имя одной из архивируемых папок - в логе просто "Error: 2".
А надо бы чтоб было всё это:
D:\>forum.bat

7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning


C:\register centr\OUT2: WARNING: Не удается найти указанный файл.



Creating archive \\backup1\BACKUPS\Register_secretar\14.7z


WARNINGS for files:

C:\register centr\OUT2 : Не удается найти указанный файл.

----------------
WARNING: Cannot find 1 file

Error:
7-Zip cannot open file
\\backup1\BACKUPS\Register_secretar\14.7z
Не найден сетевой путь.



System error:
Неопознанная ошибка

Последний раз редактировалось Charg, 14-07-2015 в 13:18.


Отправлено: 13:02, 14-07-2015 | #8


Ветеран


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

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


Цитата Charg:
в логе просто "Error: 2". »
Ровно код ошибки:
Цитата 7-Zip Help:
Exit Codes from 7-Zip
7-Zip returns the following exit codes:

Code Meaning:
0 No error
1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.
2 Fatal error
7 Command line error
8 Not enough memory for operation
255 User stopped the process
При большом желании можно, конечно, добавить эту расшифровку.

Цитата Charg:
А надо бы чтоб было всё это: »
Тогда попрощайтесь с «процентиками для пользователя» . Добавьте вывод в тот же файл:
Код: Выделить весь код
>>"BAD_log_%date%.txt" "%ProgramFiles%\7-Zip\7z.exe" a -y -ssw -t7z 

Отправлено: 13:32, 14-07-2015 | #9


Аватара для Charg

Ветеран


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

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


Цитата Iska:
Добавьте вывод в тот же файл: »
И как это все будет происходить? Выполняется архивирование а потом когда доходил дело до лога оно снова повторяет всё "чтобы посмотреть что будет и записать" ? Т.е. по факту время выполнения скрипта х2?

Отправлено: 14:36, 14-07-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите с двумя скриптами (резервное копирование и копирование с условием) n_i_x Программирование в *nix 3 21-06-2015 01:54
Резервное копирование skynet88 Хочу все знать 1 27-11-2014 15:27
Debian/Ubuntu - Резервное копирование. Tankistspb Общий по Linux 2 25-02-2008 11:56
Резервное копирование!! Forest_G Хочу все знать 2 09-06-2006 17:36
Резервное копирование dimon55 Хочу все знать 1 01-08-2003 23:55




 
Переход