Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Не создается лог целостности архива. (http://forum.oszone.net/showthread.php?t=331973)

diagnoz_ 18-12-2017 09:15 2785116

Не создается лог целостности архива.
 
Здравствуйте. Сделал следующий пакетный файл для резервного копирования БД через 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-файл. Подскажите, что не так, возможно нужно внести еще какие-то коррективы в код? спасибо.

Iska 18-12-2017 09:51 2785125

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%\*"

Цитата:

Цитата diagnoz_
но вот не пишется лог в тот каталог куда и происходит копирование архива, а вместо того пишется в каталог установки 7zip с датой создания. если же вручную запускаю этот bat из того каталога где он лежит, то лог создается в том же каталоге, где и сам bat-файл. »

Всё именно так, как и заказывали:
Цитата:

Цитата diagnoz_
%PROG% t "\\server\\папка\папка1\папка2"\*.7z -bse0 >> backup_%DATE%.log »

— Вы ведь не указываете путь, вот он и берётся для backup_%DATE%.log текущим.

Если требуется:
Цитата:

Цитата diagnoz_
лог в тот каталог куда и происходит копирование архива »

то его и укажите.
Примерная болванка (не проверялось)
Код:

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

Iska, спасибо, Вы как всегда на высоте.
Цитата:

Цитата Iska
Кавычки также не стоит указывать в значениях переменных окружения »

тестово убрал кавычки из путей, но не сработал файл. мелькнуло консольное окно и все - тишина.

А болванка сработала как полагается. :)

Iska 18-12-2017 10:54 2785138

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 2785145

:blush2: получилось.

diagnoz_ 18-12-2017 11:38 2785158

Странно, эта конструкция без кавычек сработала только локально, с диска на диск. но по сети нет:
Цитата:

Цитата Iska
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%\*"
»

а именно: копирование реально идет, но не пойми куда, хотя путь указан явно. только лог создался и тот пустой. архив не создается.

Та же история и с болванкой...

Iska 18-12-2017 11:47 2785161

Цитата:

Цитата diagnoz_
а именно: копирование реально идет, но не пойми куда, хотя путь указан явно. »

Я бы сказал — не пойми откуда. Вы видели, что у Вас получается в итоге в источнике? Я вижу его по Вашему коду как "Источник_копирования\*\*".

Смотрите код, который я привёл выше в «Примерная болванка (не проверялось)».

diagnoz_ 18-12-2017 12:57 2785177

Iska,
упустил, в пути к каталогам есть русские буквы и пробелы, от того и ставил кавычки. или не надо? так как Вы указали в переменных - это я уже уяснил.

Iska 18-12-2017 13:21 2785183

diagnoz_, кавычки обязательны, если есть пробелы, но я лично обрамляю пути кавычками в любом случае, независимо от того, могут ли там быть пробельные символы (не только пробелы) или не могут быть.

diagnoz_ 19-12-2017 08:58 2785350

Iska, никак не могу прикрутить, например, предложенную болванку для копирования по сети. выяснил, что это копирование " в никуда", идет прямо в корень того диска, куда должно идти копирование, вместо диск:\папка\пака\папка! да и плюс, не и выполняется копирование Всех, файлов в архив, а только папки и их содержимое, а те Файлы которые в корне основной папки, пропускаются.

diagnoz_ 19-12-2017 09:03 2785352

Пример, моим кодом папки архивируются, а файлы ниже нет.

Iska 19-12-2017 09:33 2785359

Цитата:

Цитата diagnoz_
Iska, никак не могу прикрутить, например, предложенную болванку для копирования по сети. выяснил, что это копирование " в никуда", идет прямо в корень того диска, куда должно идти копирование, вместо диск:\папка\пака\папка! »

Покажите результирующий код, который Вы использовали.

diagnoz_ 19-12-2017 09:43 2785362

Код:

@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

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

На проверку архива, не смотрите, я уже о ней и не думаю...

В пути "куда копировать", как ранее писал есть пробелы в названии папок с русскими буквами.

Iska 19-12-2017 11:19 2785398

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 2785445

Iska, архив кидало в корень диска потому, что не видело в пути папок с русскими именами, а именно:
Код:

\\ip_adress_server\drive_name\папка_с русскими_буквами\папка_с_русскими_буквами
с иероглифами в пути в папках с русскими символами.
указав для примера путь полностью на латинице, все отлично сохранилось по указанному пути.

Iska 19-12-2017 13:04 2785458

Цитата:

Цитата diagnoz_
Iska, архив кидало в корень диска потому, что не видело в пути папок с русскими именами, »

Уфф…
Цитата:

Цитата Iska
diagnoz_, уберите «chcp 1251» и просто сохраняйте пакетный файл в кодировке OEM/866. »


diagnoz_ 19-12-2017 13:09 2785461

Iska, да за кодировку понял из первого Вашего поста.. :) это я как бы объяснил сам себе :)

и кстати, в коде выше, нет строки chcp 1251. вот я за него и говорю. его и пробовал использовать. сам же bat сохранен OEM/866 (пользуюсь Notepad ++). строка с русскими буквами выходит снова не по тому пути,если путь "русский": "X:\╨æ╤â╤à╨│╨░╨╗╤é╨╡╤Ç╨╕╤Å\╨¢╨╡╨╜╨░ ╨Ü\╨á╨╡╨╖╨╡╤Ç╨▓╨╜╤ï╨╡ ╨▒╨░╨╖╤ï 1╨í"

diagnoz_ 19-12-2017 13:25 2785473

а если в коде стоит \\server\drive_name\New folder\New folder\New folder, то код отрабатывается успешно по этому пути. "русский" путь, код минует и пишется с начала в корень диска, где имя диска на латинице, а затем пошли папки с иероглифами как выше, и в конечной папке архив.

Iska 19-12-2017 13:32 2785477

Цитата:

Цитата diagnoz_
и кстати, в коде выше, нет строки chcp 1251. »

Она и не нужна при сохранении в кодировке OEM/866.

Цитата:

Цитата diagnoz_
сам же bat сохранен OEM/866 (пользуюсь Notepad ++). строка с русскими буквами выходит снова не по тому пути,если путь "русский": "X:\╨æ╤â╤à╨│╨░╨╗╤é╨╡╤Ç╨╕╤Å\╨¢╨╡╨╜╨░ ╨Ü\╨á╨╡╨╖╨╡╤Ç╨▓╨╜╤ï╨╡ ╨▒╨░╨╖╤ï 1╨í" »

Значит, Вы что-то делаете не так в Notepad++. Вам следует:
  • создать новый файл (\Файл\Новый);
  • сохранить этот файл (\Файл\Сохранить как…, bla-bla-bla.cmd);
  • сменить кодировку на OEM/866 (\Кодировки\Кодировки\Кириллица\OEM 866);
  • скопировать код с форума и вставить в окно;
  • сохранить файл.
Вы же сначала вставляете/набираете текст, затем выбираете его представление, в результате чего отображается белиберда, а содержимое файла как было, так и осталось в умолчальном для Notepad++ UTF-8/65001.

Вообще, Notepad++ не самый удачный выбор для работы с пакетными файлами. Самый удачный — Far Manager и его редактор:
Пример:

diagnoz_ 19-12-2017 14:20 2785502

Заморил я Вас. сделал, как Вы написали выше, но увы, поверьте, снова "минует" "русский"путь в коде и какого-то черта начинает сохранять с корня диска\╨æ╤â╤à╨│╨░╨╗╤é╨╡╤Ç╨╕╤Å\╨¢╨╡╨╜╨░ ╨Ü\╨á╨╡╨╖╨╡╤Ç╨▓╨╜╤ï╨╡ ╨▒╨░╨╖╤ï 1╨í". ну и если путь на английском, вида: \\server\drive_name\New folder\New folder\End folder, оо все гаразд, архив создается в End folder.
я когда-то, менял кодировку в cmd на этой windows Server 2003, думается все отсюда и растет.

P.S. да черт с той белибердой, ничего не мешает создать отдельно папку на латинице и сохранять архивы туда.


Время: 21:08.

Время: 21:08.
© OSzone.net 2001-