CMD/BAT - [решено] Резервное копирование

Аватара пользователя
Charg

CMD/BAT - [решено] Резервное копирование

Сообщение Charg »

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



Скрытый текст

[spoiler]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[/spoiler]






Вопросов несколько:

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

2. Какую кодировку нужно использовать (и что сделать чтобы ее "применить") чтобы стандартный виндовый (хр) блокнот нормально читал логи? Дело в том что некоторые архивируемые файлы имеют русские названия, соответственно кириллица превращается в кракозябры.

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

4. Если присутствует "говнокод" - просьба на это указать, я пока учусь и соответственно хотелось бы учиться делать правильно а не абы работало Изображение
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Elven »

3. Судя по ключу /Y архив перезапишет существующий при копировании. Больше можно ничего ничего не указывать.

2. 866

1. Что именно нужно логировать? Если достаточно времени/даты начала/завершения то это добавление нескольких ECHO в файл лога. например:



Код:

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

ECHO started at %time%, %date% >>d:\log_%date%.txt

Да и изначальный вариант с
Цитата Charg:



"D:\первыйбатник.bat">d:\log_%date%.txt
CMD/BAT - [решено] Резервное копирование




весьма даже нормален. Неужели автоматизация процесса делается только для того чтобы внимательно созерцать как этот процесс автоматизирован? Изображение
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Iska »

Цитата Charg:



может как-то попроще можно?
CMD/BAT - [решено] Резервное копирование




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




Цитата Charg:



1. Как сделать так чтобы записать лог всего этого? Можно конечно сделать второй батник и его запускать вот так "D:\первыйбатник.bat">d:\log_%date%.txt но тогда во время работы самого батника (первого) ничего не будет визуально заметно, а там сам 7z пишет в командную строку прогресс архивирования в процентах, хотелось бы это видеть.
CMD/BAT - [решено] Резервное копирование




Надо полагать, через большие костыли в виде «tee.exe».




Цитата Charg:



2. Какую кодировку нужно использовать (и что сделать чтобы ее "применить") чтобы стандартный виндовый (хр) блокнот нормально читал логи? Дело в том что некоторые архивируемые файлы имеют русские названия, соответственно кириллица превращается в кракозябры.
CMD/BAT - [решено] Резервное копирование




Надо не использовать «стандартный виндовый» Блокнот, а нечто другое, понимающее кодировку OEM/866. В принципе, Вы можете управлять кодировкой вывода 7-zip, но тогда вовсе получится каша из 866 и 1251.




Цитата Charg:



3. Суть батника в том что он каждый день будет создавать архивы 01.7z, 02.7z и т.д. по дням, и соответственно когда наступит первое число следующего месяца - нужно архив перезаписать. Это по дефолту делается или нужно указать какие-то дополнительные параметры?
CMD/BAT - [решено] Резервное копирование




Будут «молча» обновлены файлы в уже существующем архиве. Отсутствующие файлы не будут удалены из архива.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Iska »

Цитата Elven:



Что именно нужно логировать? Если достаточно времени/даты начала/завершения то это добавление нескольких ECHO в файл лога. например:
CMD/BAT - [решено] Резервное копирование




Ну в идеале я хочу прикрутить логирование вот так:



Код:

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

IF %errorlevel%==0 goto :дальше
ELSE >вот тут пишем BAD_log_%date%.txt

Но не знаю как. А вообще само содержание лога в случае успеха не важно, а вот если что-то пошло не так - хотелось бы видеть то что пишет сам 7z. Ну или net\copy если ошибка на этих этапах.






Цитата Elven:



Неужели автоматизация процесса делается только для того чтобы внимательно созерцать как этот процесс автоматизирован?
CMD/BAT - [решено] Резервное копирование




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

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Iska »

Цитата Charg:



Помнится где-то читал что так делать не рекомендуется (не помню уже какие аргументы были против).
CMD/BAT - [решено] Резервное копирование




Не встречал такого.




Цитата Charg:



получается придется вручную удалять
CMD/BAT - [решено] Резервное копирование




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




Цитата Charg:



Ну в идеале я хочу прикрутить логирование вот так:
CMD/BAT - [решено] Резервное копирование






Код:

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

@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:



(планируется делать бэкап каждый день за пол часа до конца рабочего дня, делается все минуту-две максимум (итоговый архив
Аватара пользователя
Charg

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Charg »

Цитата Iska:



Я не могу ничего сказать, не зная задач, целей и плана Вашего расписания резервирования.
CMD/BAT - [решено] Резервное копирование




У секретаря есть реестр документов, который написан хз кем и когда. Резервное копирование там не реализовано совсем, не говоря уже об автоматическом. Руководство, как это обычно и бывает, очень удивилось, услышав что если навернется компьютер секретаря - весь их реестр за 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
CMD/BAT - [решено] Резервное копирование




Хмм, спасибо, удобно получилось.

А exit /b 0 зачем? После архивирования еще ж нужно в этом же батнике архив переместить на nas, а exit /b 0 заканчивает работу батник при %errorlevel%==0, насколько я понял из справки?




Цитата Iska:



Назначьте исполнение пакетного файла на Logoff посредством групповой политики. И не понадобится «-ssw».
CMD/BAT - [решено] Резервное копирование




Событие Logoff это выключение питания или завершение сеанса пользователя? Судя по названию скорее второе но все-таки. И как это сделать?
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Iska »

Цитата Charg:



А exit /b 0 зачем?
CMD/BAT - [решено] Резервное копирование




Это установка значения errorlevel для родительского процесса.




Цитата Charg:



После архивирования еще ж нужно в этом же батнике архив переместить на nas
CMD/BAT - [решено] Резервное копирование




Разве:



Код:

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

"%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 это выключение питания или завершение сеанса пользователя?
CMD/BAT - [решено] Резервное копирование




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




Цитата Charg:



И как это сделать?
CMD/BAT - [решено] Резервное копирование




Назначение сценариев выхода пользователя из системы
Аватара пользователя
Charg

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Charg »

Цитата Iska:



?! Или «\\backup» — это ещё не NAS?
CMD/BAT - [решено] Резервное копирование




А, он самый, проглядел.



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


А надо бы чтоб было всё это:

[spoiler]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:

Неопознанная ошибка[/spoiler]
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Iska »

Цитата Charg:



в логе просто "Error: 2".
CMD/BAT - [решено] Резервное копирование




Ровно код ошибки:


Цитата 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:



А надо бы чтоб было всё это:
CMD/BAT - [решено] Резервное копирование




Тогда попрощайтесь с «процентиками для пользователя» Изображение. Добавьте вывод в тот же файл:



Код:

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

>>"BAD_log_%date%.txt" "%ProgramFiles%\7-Zip\7z.exe" a -y -ssw -t7z …
Аватара пользователя
Charg

Re: CMD/BAT - [решено] Резервное копирование

Сообщение Charg »

Цитата Iska:



Добавьте вывод в тот же файл:
CMD/BAT - [решено] Резервное копирование




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

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