Показать полную графическую версию : Не создается лог целостности архива.
diagnoz_
18-12-2017, 09:15
Здравствуйте. Сделал следующий пакетный файл для резервного копирования БД через 7zip с одного ПК по сети на другой ПК, ну и закинул его в шедулер :
cmdow @ /HID
@echo on
chcp 1251
:: Определение переменных сред для каталогов
set PROG="c:\Program Files\7-Zip\7z.exe"
set SOURCE="Источник_копирования"\*
set DESTINATION="\\server\\папка\папка1\папка2\Backup_"%DATE%.7z
%PROG% a -mx=9 -ssw %DESTINATION% %SOURCE%\*
:: Тестирование архива на целостность и вывод результатов в файл
%PROG% t "\\server\\папка\папка1\папка2"\*.7z -bse0 >> backup_%DATE%.log
Резервное копирование отрабатывает, затем происходит тестирование архива, но вот не пишется лог в тот каталог куда и происходит копирование архива, а вместо того пишется в каталог установки 7zip с датой создания. если же вручную запускаю этот bat из того каталога где он лежит, то лог создается в том же каталоге, где и сам bat-файл. Подскажите, что не так, возможно нужно внести еще какие-то коррективы в код? спасибо.
diagnoz_, уберите «chcp 1251» и просто сохраняйте пакетный файл в кодировке OEM/866. Кавычки также не стоит указывать в значениях переменных окружения, указывайте их непосредственно в командах, то есть вот так:
set PROG=c:\Program Files\7-Zip\7z.exe
set SOURCE=Источник_копирования\*
set DESTINATION=\\server\\папка\папка1\папка2\Backup_%DATE%.7z
"%PROG%" a -mx=9 -ssw "%DESTINATION%" "%SOURCE%\*"
но вот не пишется лог в тот каталог куда и происходит копирование архива, а вместо того пишется в каталог установки 7zip с датой создания. если же вручную запускаю этот bat из того каталога где он лежит, то лог создается в том же каталоге, где и сам bat-файл. »
Всё именно так, как и заказывали:
%PROG% t "\\server\\папка\папка1\папка2"\*.7z -bse0 >> backup_%DATE%.log »
— Вы ведь не указываете путь, вот он и берётся для backup_%DATE%.log текущим.
Если требуется:
лог в тот каталог куда и происходит копирование архива »
то его и укажите.
@echo off
setlocal enableextensions enabledelayedexpansion
rem Определение переменных сред для каталогов
set sApplication=%ProgramFiles%\7-Zip\7z.exe
set sSource=Источник_копирования\*
set sDestination=\\server\\папка\папка1\папка2\
set sFileName=Backup_%DATE%
"%sApplication%" a -mx=9 -ssw "%sDestination%\%sFileName%.7z" "%sSource%"
rem Тестирование архива на целостность и вывод результатов в файл
>>"%sDestination%\%sFileName%.log" "%sApplication%" t -bse0 "%sDestination%\%sFileName%.7z"
endlocal
exit /b 0
Я, правда, не понял, зачем Вы подавляете поток ошибок при тестировании? В чём смысл? И само тестирование зачем — ведь можно просто использовать ExitCode, возвращаемый 7-Zip, при создании архива?
diagnoz_
18-12-2017, 10:43
Iska, спасибо, Вы как всегда на высоте.
Кавычки также не стоит указывать в значениях переменных окружения »
тестово убрал кавычки из путей, но не сработал файл. мелькнуло консольное окно и все - тишина.
А болванка сработала как полагается. :)
diagnoz_, из путей убирать не надо. Убирать надо из значений переменных окружения. Я ж даже пример на основе Вашего кода приводил:
set PROG=c:\Program Files\7-Zip\7z.exe
set SOURCE=Источник_копирования\*
set DESTINATION=\\server\\папка\папка1\папка2\Backup_%DATE%.7z
"%PROG%" a -mx=9 -ssw "%DESTINATION%" "%SOURCE%\*"
diagnoz_
18-12-2017, 11:01
:blush2: получилось.
diagnoz_
18-12-2017, 11:38
Странно, эта конструкция без кавычек сработала только локально, с диска на диск. но по сети нет:
set PROG=c:\Program Files\7-Zip\7z.exe
set SOURCE=Источник_копирования\*
set DESTINATION=\\server\\папка\папка1\папка2\Backup_%DATE%.7z
"%PROG%" a -mx=9 -ssw "%DESTINATION%" "%SOURCE%\*"
»
а именно: копирование реально идет, но не пойми куда, хотя путь указан явно. только лог создался и тот пустой. архив не создается.
Та же история и с болванкой...
а именно: копирование реально идет, но не пойми куда, хотя путь указан явно. »
Я бы сказал — не пойми откуда. Вы видели, что у Вас получается в итоге в источнике? Я вижу его по Вашему коду как "Источник_копирования\*\*".
Смотрите код, который я привёл выше в «Примерная болванка (не проверялось)».
diagnoz_
18-12-2017, 12:57
Iska,
упустил, в пути к каталогам есть русские буквы и пробелы, от того и ставил кавычки. или не надо? так как Вы указали в переменных - это я уже уяснил.
diagnoz_, кавычки обязательны, если есть пробелы, но я лично обрамляю пути кавычками в любом случае, независимо от того, могут ли там быть пробельные символы (не только пробелы) или не могут быть.
diagnoz_
19-12-2017, 08:58
Iska, никак не могу прикрутить, например, предложенную болванку для копирования по сети. выяснил, что это копирование " в никуда", идет прямо в корень того диска, куда должно идти копирование, вместо диск:\папка\пака\папка! да и плюс, не и выполняется копирование Всех, файлов в архив, а только папки и их содержимое, а те Файлы которые в корне основной папки, пропускаются.
diagnoz_
19-12-2017, 09:03
Пример, моим кодом папки архивируются, а файлы ниже нет.
Iska, никак не могу прикрутить, например, предложенную болванку для копирования по сети. выяснил, что это копирование " в никуда", идет прямо в корень того диска, куда должно идти копирование, вместо диск:\папка\пака\папка! »
Покажите результирующий код, который Вы использовали.
diagnoz_
19-12-2017, 09:43
@echo off
setlocal enableextensions enabledelayedexpansion
:: Определение переменных сред для каталогов
set sApplication=%ProgramFiles%%\7-Zip\7zG.exe
set sSource=F:\папка\*
set sDestination=\\server\папка1\папка2\папка2\папка3\Backup_%DATE%.7z
set sFileName=Backup_%DATE%
"%sApplication%" a -mx=9 -ssw "%sDestination%\%sFileName%.7z" "%sSource%"
:: Тестирование архива на целостность и вывод результатов в файл
>>"%sDestination%\%sFileName%.log" "%sApplication%" t -bse0 "%sDestination%\%sFileName%.7z"
endlocal
exit /b 0
При таком исполнении копирование идет в корень сетевого диска, но со всем содержимым.
cmdow @ /HID
@echo on
:: Определение переменных сред для каталогов
set PROG=c:\Program Files\7-Zip\7zG.exe
set SOURCE=F:\папка\*
set DESTINATION=\\server\папка1\папка2\папка2\папка3\Backup_%DATE%.7z
"%PROG%" a -mx=9 -ssw "%DESTINATION%" "%SOURCE%"\*
:: Тестирование архива на целостность и вывод результатов в файл
%PROG% t "\\server\папка1\папка2\папка2\папка3"\*.7z -bse0 >> backup_%DATE%.log
При таком, также в корень, но без файлов в корне основной папки, только вложенные папки.
На проверку архива, не смотрите, я уже о ней и не думаю...
В пути "куда копировать", как ранее писал есть пробелы в названии папок с русскими буквами.
diagnoz_, используйте rem, а не ::. Не надо 7zG.exe, пусть будет 7z.exe. В sDestination должен быть только путь, зачем Вы туда опять втиснули имя файла, которое в моём коде определяется отдельной переменной и ниже?
@echo off
setlocal enableextensions enabledelayedexpansion
rem Определение переменных сред для каталогов
set sApplication=%ProgramFiles%%\7-Zip\7z.exe
set sSource=F:\папка\*
set sDestination=\\server\папка1\папка2\папка2\папка3
set sFileName=Backup_%DATE%
"%sApplication%" a -mx=9 -ssw "%sDestination%\%sFileName%.7z" "%sSource%"
rem Тестирование архива на целостность и вывод результатов в файл
>>"%sDestination%\%sFileName%.log" "%sApplication%" t -bse0 "%sDestination%\%sFileName%.7z"
endlocal
exit /b 0
diagnoz_
19-12-2017, 12:51
Iska, архив кидало в корень диска потому, что не видело в пути папок с русскими именами, а именно:
\\ip_adress_server\drive_name\папка_с русскими_буквами\папка_с_русскими_буквами
с иероглифами в пути в папках с русскими символами.
указав для примера путь полностью на латинице, все отлично сохранилось по указанному пути.
Iska, архив кидало в корень диска потому, что не видело в пути папок с русскими именами, »
Уфф…
diagnoz_, уберите «chcp 1251» и просто сохраняйте пакетный файл в кодировке OEM/866. »
diagnoz_
19-12-2017, 13:09
Iska, да за кодировку понял из первого Вашего поста.. :) это я как бы объяснил сам себе :)
и кстати, в коде выше, нет строки chcp 1251. вот я за него и говорю. его и пробовал использовать. сам же bat сохранен OEM/866 (пользуюсь Notepad ++). строка с русскими буквами выходит снова не по тому пути,если путь "русский": "X:\╨æ╤â╤à╨│╨░╨╗╤é╨╡╤Ç╨╕╤Å\╨¢╨╡╨╜╨░ ╨Ü\╨á╨╡╨╖╨╡╤Ç╨▓╨╜╤ï╨╡ ╨▒╨░╨╖╤ï 1╨í"
diagnoz_
19-12-2017, 13:25
а если в коде стоит \\server\drive_name\New folder\New folder\New folder, то код отрабатывается успешно по этому пути. "русский" путь, код минует и пишется с начала в корень диска, где имя диска на латинице, а затем пошли папки с иероглифами как выше, и в конечной папке архив.
и кстати, в коде выше, нет строки chcp 1251. »
Она и не нужна при сохранении в кодировке OEM/866.
сам же bat сохранен OEM/866 (пользуюсь Notepad ++). строка с русскими буквами выходит снова не по тому пути,если путь "русский": "X:\╨æ╤â╤à╨│╨░╨╗╤é╨╡╤Ç╨╕╤Å\╨¢╨╡╨╜╨░ ╨Ü\╨á╨╡╨╖╨╡╤Ç╨▓╨╜╤ï╨╡ ╨▒╨░╨╖╤ï 1╨í" »
Значит, Вы что-то делаете не так в Notepad++. Вам следует:
создать новый файл (\Файл\Новый);
сохранить этот файл (\Файл\Сохранить как…, bla-bla-bla.cmd);
сменить кодировку на OEM/866 (\Кодировки\Кодировки\Кириллица\OEM 866);
скопировать код с форума и вставить в окно;
сохранить файл.
Вы же сначала вставляете/набираете текст, затем выбираете его представление, в результате чего отображается белиберда, а содержимое файла как было, так и осталось в умолчальном для Notepad++ UTF-8/65001.
Вообще, Notepad++ не самый удачный выбор для работы с пакетными файлами. Самый удачный — Far Manager и его редактор:
https://i.imgur.com/ilh38nM.png
diagnoz_
19-12-2017, 14:20
Заморил я Вас. сделал, как Вы написали выше, но увы, поверьте, снова "минует" "русский"путь в коде и какого-то черта начинает сохранять с корня диска\╨æ╤â╤à╨│╨░╨╗╤é╨╡╤Ç╨╕╤Å\╨¢╨╡╨╜╨░ ╨Ü\╨á╨╡╨╖╨╡╤Ç╨▓╨╜╤ï╨╡ ╨▒╨░╨╖╤ï 1╨í". ну и если путь на английском, вида: \\server\drive_name\New folder\New folder\End folder, оо все гаразд, архив создается в End folder.
я когда-то, менял кодировку в cmd на этой windows Server 2003, думается все отсюда и растет.
P.S. да черт с той белибердой, ничего не мешает создать отдельно папку на латинице и сохранять архивы туда.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC