Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум 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

 

Ветеран


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

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


Цитата Charg:
И как это все будет происходить? »
Стандартный поток вывода stdout приложения «7z.exe» перенаправляется в указанный файл.

Цитата Charg:
Выполняется архивирование а потом »
Никаких «потом». Вывод в файл происходит ровно в то же время, в какое ранее появлялись сообщения в окне консоли.

Цитата Charg:
Т.е. по факту время выполнения скрипта х2? »
По факту время исполнения будет ровно тем же самым.

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



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

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


Аватара для Charg

Ветеран


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

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


Цитата Iska:
Стандартный поток вывода stdout приложения «7z.exe» перенаправляется в указанный файл. »
Какая-нибудь переменная есть, которая хранит всё это в себе? А то получается слишком длинно да и вдруг чего - исправлять в двух местах придется, не феншуй как-то

Отправлено: 15:18, 14-07-2015 | #12


Ветеран


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

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


Тогда вот так попробуйте (не проверялось):
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sConstPath=C:\register centr

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

endlocal
exit /b 0
Вот тут уже реальный вывод в файл будет идти не сразу, а группироваться и идти по выходу из операторных скобок. Время исполнения останется тем же.

Цитата Charg:
Какая-нибудь переменная есть, которая хранит всё это в себе? »
Нет .

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


Аватара для gora

Ушёл из жизни


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

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


В последних версиях 7-Zip появился новый ключ. Возможно это как-то поможет при разделении потоков вывода...
Цитата:
-bs[o|e|p][0|1|2] Set output stream for output/error/progress line; 0: disable, 1: stdout, 2: stderr.

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


Ветеран


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

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


Цитата gora:
В последних версиях 7-Zip появился новый ключ. »
Кстати, да! И не только. Наконец, появилось разделение — теперь собственно информация идёт в stdout, а ошибки — в stderr. В целом же :
Цитата:
- Console version now uses stderr stream for error messages.
- Console version now shows names of processed files only in progress line by default.
- new -bb[0-3] switch to set output log level. -bb1 shows names of processed files in log.
- new -bs[o|e|p][0|1|2] switch to set stream for output messages;
o: output, e: error, p: progress line; 0: disable, 1: stdout, 2: stderr.
И это не может не радовать.

Я ранее читал об этом (кстати, именно по Вашей ссылке из темы аддона), но пока не пробовал .

Отправлено: 20:22, 14-07-2015 | #15


Аватара для Charg

Ветеран


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

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


gora, т.е., если я правильно понял, чтобы записать в лог все ошибки нужно добавить ключ -bso2?

Отправлено: 10:18, 15-07-2015 | #16


Аватара для gora

Ушёл из жизни


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

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


Charg, с такой командой:
Код: Выделить весь код
7z a t1.7z "R:\1\*" -bso2 2>"log_%date%.txt"
в консольное окно будет выводится только одна строка с процентами и текущим (сжимаемым в данный момент) именем файла, а весь остальной лог будет выведен в лог-файл.
Если Вас это не устроит, то можете поэкспериментировать с ключами ибо описание их достаточно скупое.
Это сообщение посчитали полезным следующие участники:

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


Аватара для Charg

Ветеран


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

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


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

Пока что рабочий вариант выглядит вот так. Нужно будет поэксперементировать с этим новым ключем еще и комментарии расписать на всякий случай.
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set cArchPath=%ProgramFiles%\7-Zip\7z.exe
set cPath=C:\register centr
set cDestination=\\backup\BACKUPS\Register_secretar
set cParams=a -y -ssw -t7z -mx5


"%cArchPath%" %cParams% "%cDestination%\%date:~0,2%.7z" "%cPath%" || >>"BAD_log_%date%.txt" "%cArchPath%" %cParams% "%cDestination%\%date:~0,2%.7z" "%cPath%"

endlocal
exit /b 0

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


Отправлено: 11:20, 15-07-2015 | #18


Ветеран


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

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


Цитата Charg:
Да, но в этом варианте лог пишется в любом случае, вне зависимости от наличия ошибок »
А причём тут ошибки? В лог пишется вывод «7z.exe». Весь вывод. Ровно так, как Вы и просили выше.

Цитата Charg:
Да и в самой консоли пустота. »
Разумеется, пустота. Поскольку весь вывод перенаправляется в файл. Я об этом писал ранее.

Цитата Charg:
Пока что рабочий вариант выглядит вот так.
Код: Выделить весь код
"%cArchPath%" %cParams% "%cDestination%\%date:~0,2%.7z" "%cPath%" || >>"BAD_log_%date%.txt" "%cArchPath%" %cParams% "%cDestination%\%date:~0,2%.7z" "%cPath%"
»
Это не рабочий вариант. Вы делаете бессмысленную работу, дважды исполняя архивирование. Если Вам уж очень надо и в лог, и на консоль (хотя я не вижу в этом смысла) — используйте костыль в виде портированной утилиты «tee.exe».

Отправлено: 13:50, 15-07-2015 | #19


Аватара для Charg

Ветеран


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

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


Цитата Iska:
хотя я не вижу в этом смысла »
Вывод в лог нужен мне, чтобы я видел как обстоят дела. Вывод в консоль нужна для того чтобы юзер видел прогресс во время выполнения архивирования.
Цитата Iska:
используйте костыль в виде портированной утилиты «tee.exe». »
Это вообще что такое? Доп. утилит устанавливать не хочу.

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



Компьютерный форум 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




 
Переход