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

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

Ответить
Настройки темы
CMD/BAT - [решено] Помогите правильно сделать апдейт архива 7zip (аналог функции RAR)

Пользователь


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

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


Изменения
Автор: blacks2
Дата: 25-11-2020
Здравствуйте.
Помогите пожалуйста: "Помогите правильно сделать апдейт архива 7zip (аналог функции RAR)"


Хотел сделать функцию которая есть в RAR:
- при создании архива, не сжимать определенные группы файлов/расширений.

Создание архива с исключениями - ОК.

А вот апдейт созданного архива сделать не получается.
Пробовал варианты (закомментированы )- не работают.


Заранее всем откликнувшимся большое спасибо!




PS
справку 7zip читал - моим мозгам не помогло
https://sevenzip.osdn.jp/chm/cmdline...hes/update.htm


Код: Выделить весь код
@ECHO OFF

:: удаляем старый архив
del c:\tempXtoo\zip.7z
echo OK (delit)
echo. & echo.
cls

:: создаем новый, исключив определенные расширения файлов (указаны в списке exclusions_01_zip.lst)
:: сжатие = 3 уровня
7za a -mx3 -r0 "c:\tempXtoo\zip.7z" "c:\tempXsrc" -x@exclusions_01_zip.lst
echo. &echo.
echo OK (-jpg -png...)
pause
cls

:: добавляем в созданный архив, файлы которые не были добавлены / по списку-расширений
:: с сжатием = 0 уровня
:: 7za a -mx0 -r0 -i@exclusions_01_zip.lst "c:\tempXtoo\zip.7z" "c:\tempXsrc\"
:: 7za a -mx0 -r0 -ir@exclusions_01_zip.lst "c:\tempXtoo\zip.7z" "c:\tempXsrc\"
:: 7za u -mx0 -r0 -u!"c:\tempXtoo\zip.7z" "c:\tempXsrc\"
:: 7za u -mx0 -ur2!"c:\tempXtoo\zip.7z" "c:\tempXsrc\"
echo. & echo.
echo OK (update)
pause
cls

echo. & echo.
echo fin
pause

Отправлено: 22:38, 24-11-2020

 

Ветеран


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

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


Общий принцип:
Код: Выделить весь код
@echo off
setlocal enableextensions disabledelayedexpansion

set sArcName=C:\Мои проекты\0326\Sample.7z

pushd "C:\Мои проекты\0326\Source" && (
	"C:\Program Files\7-Zip\7za.exe" a "%sArcName%" -mx3 -xr!*.png -xr!*.jpg
	"C:\Program Files\7-Zip\7za.exe" a "%sArcName%" -mx0 -ir!*.png -ir!*.jpg
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:08, 25-11-2020 | #2



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

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


Пользователь


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

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


Цитата Iska:
Общий принцип: »
Спасибо.
Попробовал - стало лучше, но не совсем:


2 варианта:
7za.exe a "c:\tempXtoo\zip.7z" "c:\tempXsrc\" -mx0 -ir!exclusions_01_zip.lst
7za.exe a "c:\tempXtoo\zip.7z" "c:\tempXsrc\" -mx0 -i!exclusions_01_zip.lst
(-ir! или -i!)

оба варианта добавляют исключенные файлы по расширению - хорошо
но добавляет и файл exclusions_01_zip.lst внутрь архива
- видимо что-то не то...
- подскажите пожалуйста что опять не правильно?

Отправлено: 02:21, 25-11-2020 | #3


Ветеран


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

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


Цитата blacks2:
но добавляет и файл exclusions_01_zip.lst внутрь архива »
Зачем Вы его держите внутри того каталога, который архивируете? Это называется ССЗБ.

Второе:
Цитата:
Код: Выделить весь код
-i[<recurse_type>]<file_ref>

<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}
listfile должен предваряться символом «@», а не «!». А так Вы закономерно получаете внутри архива ровно то, что и запросили.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:46, 25-11-2020 | #4


Ветеран


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

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


blacks2, -mx0 = копирование без сжатия. Так и задумано? Без этого ключа будет применено значение по умолчанию (-mx5).
По умолчанию 7-Zip пытается прочесть файл-список в кодировке UTF-8, но вы можете использовать и иную кодировку, указав её ключом -scs .
Множественные файл-списки поддержаны.
Код: Выделить весь код
7z a archive.7z @listfile.txt -scs1251
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:02, 25-11-2020 | #5


Ветеран


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

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


Цитата sov44:
blacks2, -mx0 = копирование без сжатия. Так и задумано? »
Да. Особого смысла жать jpg/png и т.п. — нет. Как Вам такое:
Скрытый текст

?!

Отправлено: 08:52, 25-11-2020 | #6


Ветеран


Contributor


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

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


blacks2,
Цитата blacks2:
но добавляет и файл exclusions_01_zip.lst внутрь архива »
А что, если совсем без "exclusions_01_zip.lst", как с идеей Iska
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=D:\CMD_Forum"
	Set "ArcOut=D:\Delete\testzip"

	Set "Exc3=*.bat *.vbs *.js *.mp3 *.xls* *.png"
	Set "Add0=*.mp3 *.xls*" 

	Set Arc="C:\Program Files\7-Zip\7z.exe"

	pushd "%BoxIn%" &&(
		%Arc% u -mx3 -r0 -xr!%Exc3: = -xr!% "%ArcOut%" 
		%Arc% u -mx0 -r0 -ir!%Add0: = -ir!% "%ArcOut%"
	)
Pause
Exit /B
Естественно можно сделать список исключений и список вторичного добавления одинаковым

Set "Add0=%Exc3%"
Если в масках возможны пробелы, то
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=D:\CMD_Forum"
	Set "ArcOut=D:\Delete\testzip1"

	Set "Exc3="*.bat" "*.vbs" "*.js" "?? * *.mp3" "*.xls*" "*.png""
	Set "Add0="?? * *.mp3" "*.xls*"" 

	Set Arc="C:\Program Files\7-Zip\7z.exe"

	pushd "%BoxIn%" &&(
		%Arc% u -mx3 -r0 -xr!%Exc3:" "=" -xr!"% "%ArcOut%" 
		%Arc% u -mx0 -r0 -ir!%Add0:" "=" -ir!"% "%ArcOut%"
	)
Pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-11-2020 в 20:55.


Отправлено: 20:33, 25-11-2020 | #7


Пользователь


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

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


Цитата Iska:
Зачем Вы его держите внутри того каталога, который архивируете? »
Даже не думал об этом
Всё в разных!

go_to_archiv.cmd + exclusions_01_zip.lst
- лежат рядом, вместе на диске x:\some\rnd\

файлы для архивации и zip
- "c:\tempXtoo\zip.7z" "c:\tempXsrc"



Цитата Iska:
listfile должен предваряться символом «@», а не «!» »
Спасибо. Пробовал так и сяк:
-ir@exclusions_01_zip.lst
-i@exclusions_01_zip.lst

исключенные расширения добавились - ОК
exclusions_01_zip.lst - не добавился - ОК

Но.. на этот раз добавились...
ненужные архивы лежащие рядом с исполняющим go_to_archiv.cmd (тестовая папка арихваторов)
pigz_Windows.zip
pigz_Windows_CloudFlareZlib.zip


Что-то опять пошло не так.
Что делать - не понимаю ((

В обоих случаях добавлялся файл в котором присутствовало слово или расширение "zip".
Которое указанно первым в списке исключений

Можно конечно просто убрать из папки исполняющим CMD
- файлы pigz_Windows.zip и pigz_Windows_CloudFlareZlib.zip (тогда все работает ОК)
- но вдруг, в папке с исполняющим CMD появится файл с "zip" или другой какой с расширением записанным в списке исключений (картинка, pdf) - они могут добавиться в архив...

Глянул еще раз список exclusions_01_zip.lst - вроде все норм.
Даже попробовал в одну строку - результат не рабочий...

exclusions_01_zip.lst
*.zip
*.7z
*.rar
*.gzip
*.tar
*.arj
*.iso
*.djvu
*.epub
*.jpg
*.jpeg
*.jp2
*.png
*.gif
*.webp
*.avi
*.mp4
*.mkv
*.mpeg
*.mpg
*.avi
*.wmv
*.flv
*.mp3
*.flac
*.ogg
*.3gp
*.ape
*.aac
*.asf
*.amr
*.wma
*.000
*.001
*.002
*.003
*.004
*.005
*.006
*.007
*.008
*.009
*.010
*.011
*.012
*.013





PS
Хм, а вот megaloman предлагает -ir!% "%ArcOut%"
посмотрел, да и вы ранее в варианте с pushd также предлагали

"Да. Особого смысла жать jpg/png и т.п. — нет. Как Вам такое:"
потому мне и захотелось 7zip для тестов-прогонов так настроить.
А не получается...

* Iska, картинка гениальная!
правда мои pdf печатного качества наоборот жмутся влёт: 300мб в 35-80Мб
просто большинство pdf офис док-текст /или сжаты для веба - плохо и жмутся.
всё зависит от настроек вывода pdf из софта - качество pdf)





Цитата megaloman:
А что, если совсем без "exclusions_01_zip.lst", как с идеей Iska post=2941026]»[/post]
megaloman попробвал ваш пример - работает
ничего лишнего не добавляет - гуд

только создаваемый архив не имеет имени, просто ".zip" (делал через 7za.exe)
назначить имя файлу не понял как 0



Далее
решил попробовать так в своем cmd:
a -ssw -mx9 -r0 -xr@exclusions_01_zip.lst
u -ssw -mx0 -r0 -i@exclusions_01_zip.lst
(изменил а на u)

- работает!
- НО.. как писал выше, при обновлении архива, добавляются pigz_Windows.zip, pigz_Windows_CloudFlareZlib.zip лежащие рядом с исполняющим CMD
- ...походу особенности 7zip или что-то не то с exclusions_01_zip.lst (там указан формат *.zip)

Не понимаю...
"Оформление"-способ скрипта все же хотелось оставить свой прежний, нежели PUSHD
так как мне более понятный и в общем концепте выглядит гармонично
(всё сделано молотком, а тут что-то изящное и не понятное )

Но не получается!
Не понимаю!

почему добавляются zip..
и возможные дальнейшие конфликты с другими файлами




OFF
Цитата megaloman:
Если в масках возможны пробелы, то »
правильно ли я понял / ошибаюсь:

"?? * *.mp3"
- файл вида "маша - бла бла бла.mp3"
- разве *.mp3 недостаточно?
- простите за вопрос, просто ранее таких конструкций не видел, потому смутился



Цитата megaloman:
А что, если совсем без "exclusions_01_zip.lst", как с идеей Iska »
просто:
я новичок в cmd, не программист - изредка собираю что-то для домашнего парка на заплатках-сниппетах и полученном ранее опыте.
потому конструкция в топике мне проще и понятней, а на несколько ступенек выше еще не перешел.
плюс стандартный вопрос новичка: когда делаешь шаг на новую ступень, твое положение шатко и возможны конфликты в коде

вместо 3d принтера... молоток+гвоздь
PUSHD`ом пока не проникся...

Отправлено: 00:32, 27-11-2020 | #8


Ветеран


Contributor


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

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


Цитата blacks2:
назначить имя файлу не понял как .... только создаваемый архив не имеет имени, просто ".zip»
Покажите Ваш вариант моего батника.
Цитата megaloman:
Set "ArcOut=D:\Delete\testzip" »
Имя файла прописывается здесь. В моём примере архив будет иметь имя testzip.7Z
Цитата blacks2:
"?? * *.mp3"
- файл вида "маша - бла бла бла.mp3"
- разве *.mp3 недостаточно? »
Вполне достаточно, если у вас простая маска *.mp3, а если надо более сложная маска, с пробелами внутри, то вариант для этого я Вам выдал тоже.
И, раз такая пьянка, если Вы разделяете файлы только по расширению, то список можно сделать проще, убрать из списка *. и оставить только расширения:
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=D:\CMD_Forum"
	Set "ArcOut=D:\Delete\testzip"

	Set "Exc3=bat vbs js mp3 xls* png"
	Set "Add0=mp3 xls*"

	Set Arc="C:\Program Files\7-Zip\7z.exe"

	pushd "%BoxIn%" &&(
		%Arc% u -mx3 -r0 -xr!*.%Exc3: = -xr!*.% "%ArcOut%"
		%Arc% u -mx0 -r0 -ir!*.%Add0: = -ir!*.% "%ArcOut%"
	)
Pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:19, 27-11-2020 | #9


Пользователь


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

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


Цитата megaloman:
И, раз такая пьянка, »
Последний приведенный вами пример работает,
И без всяких лишних добавлений лишних файлов.
Спасибо!



1.
Насколько понимаю всё "выполняется из" %BoxIn% - вне папки исполняющего cmd
Поэтому ничего лишнего не подхватывается

Странно что предыдущий пример не работал.
Вроде по концепту они схожи.
Моей копии, о которой вы спросили не сохранилось.
Создал новую, новая вообще не исключает файлы по расширению

Но, наверное, уже не в ней суть - последняя версия сработала.
Копия предыдущего примера
@Echo Off

Set "BoxIn=c:\tempXsrc"
Set "ArcOut=c:\tempXtoo\testzip"

Set "Exc3=*.zip *.bat *.vbs *.js *.mp3 *.xls* *.png *.jpg *.jpeg"
Set "Add0=%Exc3%"

Set Arc="%~dp07za.exe"

:: удаляем старый архив
del c:\tempXtoo\testzip.7z
cls

pushd "%BoxIn%" &&(
%Arc% u -mx3 -r0 -xr!%Exc3: = -xr!% "%ArcOut%"
%Arc% u -mx0 -r0 -ir!%Add0: = -ir!% "%ArcOut%"
)

echo OK all
Pause

Exit /B



2.
Добавив ваш пример в сборку с своими переменным
- При старте cmd просто вылетает

Попытка вставить в сборку ваш чистый пример скрипта (без моих переменных)
выдается ошибка Command Line Error: Incorrect wildcard type marker


Сборка cmd построена на вашем megaloman совете-примере точного определения времени в виде cmd-javascript. ( http://forum.oszone.net/post-2940716-8.html )
- добавлял прямяком заменой "rem === здесь код, время исполнения которого контролируем"

Видимо в чем-то конфликт...
Та сама ступенька новика о которой недавно писал .


Вычислить и исправить баг/кривые свои руки, я самостоятельно не могу.
Видно лишь то, что походу срабатывает прям на строке "pushd "%src_bkup%" &&(...."


Развивать данный топик на тему "спасибо за помощь, а теперь разберите почему не работает с моим"...
- думаю неуважение к вам megaloman и к форуму

Поэтому наверное мне придется остаться при "баранах"
7za par1=a -ssw -mx3 -r0 -xr@exclusions_01_zip.lst -mhc=on -mhe=on "%destination%\zip.7z" "%src_bkup%\"
7za par2=u -ssw -mx0 -r0 -i@exclusions_01_zip.lst -mhc=on -mhe=on "%destination%\zip.7z" "%src_bkup%\"
хоть они и "подхватывают" zip рядом с исполняющим файлом(



* 7za.exe хранится рядом с исполняющим cmd
а сама вся та папка, плавает в разных местах диска/флешки

Поэтому добавил такую строчку (вроде работает):
Set Arc="%~dp07za.exe"

Отправлено: 08:25, 28-11-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - [sevenzip] Как распаковать определённый файл из архива 7zip Painkiller Программирование и базы данных 10 24-01-2022 12:06
Утилита для создания/изменения 7zip SFX-архива XXXler Автоматическая установка Windows 2000/XP/2003 38 24-06-2017 14:23
[решено] Как самой сделать апдейт драйверам? Мартиша Хочу все знать 5 16-08-2008 19:35
Как правильно сделать загрузчик? James Marsh Общий по Linux 9 17-05-2005 13:50
Про Винс, Вин апдейт, и апдейт авп ZloiJoker Общий по FreeBSD 9 09-12-2003 15:37




 
Переход