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

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

blacks2 24-11-2020 22:38 2940920

Помогите правильно сделать апдейт архива 7zip (аналог функции RAR)
 
Здравствуйте.
Помогите пожалуйста: "Помогите правильно сделать апдейт архива 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


Iska 25-11-2020 01:08 2940930

Общий принцип:
Код:

@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


blacks2 25-11-2020 02:21 2940931

Цитата:

Цитата 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 внутрь архива
- видимо что-то не то...
- подскажите пожалуйста что опять не правильно?

Iska 25-11-2020 02:46 2940934

Цитата:

Цитата blacks2
но добавляет и файл exclusions_01_zip.lst внутрь архива »

Зачем Вы его держите внутри того каталога, который архивируете? Это называется ССЗБ.

Второе:
Цитата:

Код:

-i[<recurse_type>]<file_ref>

<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}


listfile должен предваряться символом «@», а не «!». А так Вы закономерно получаете внутри архива ровно то, что и запросили.

sov44 25-11-2020 07:02 2940943

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

7z a archive.7z @listfile.txt -scs1251

Iska 25-11-2020 08:52 2940947

Цитата:

Цитата sov44
blacks2, -mx0 = копирование без сжатия. Так и задумано? »

Да. Особого смысла жать jpg/png и т.п. — нет. Как Вам такое:
Скрытый текст

;)?!

megaloman 25-11-2020 20:33 2941026

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


blacks2 27-11-2020 00:32 2941141

Цитата:

Цитата Iska
Зачем Вы его держите внутри того каталога, который архивируете? »

Даже не думал об этом :o
Всё в разных!

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%" :not-me:
посмотрел, да и вы ранее в варианте с pushd также предлагали :happy:

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

* Iska, картинка гениальная! :jester:
правда мои 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
так как мне более понятный и в общем концепте выглядит гармонично
(всё сделано молотком, а тут что-то изящное и не понятное =) )

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




OFF
Цитата:

Цитата megaloman
Если в масках возможны пробелы, то »

правильно ли я понял / ошибаюсь:

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



Цитата:

Цитата megaloman
А что, если совсем без "exclusions_01_zip.lst", как с идеей Iska »

просто:
я новичок в cmd, не программист - изредка собираю что-то для домашнего парка на заплатках-сниппетах и полученном ранее опыте.
потому конструкция в топике мне проще и понятней, а на несколько ступенек выше еще не перешел.
плюс стандартный вопрос новичка: когда делаешь шаг на новую ступень, твое положение шатко и возможны конфликты в коде =)

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

megaloman 27-11-2020 14:19 2941194

Цитата:

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


blacks2 28-11-2020 08:25 2941245

Цитата:

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

Iska 28-11-2020 10:58 2941258

И всё же, без pushd, Вы никак не получите потребный функционал. Это не WinRAR, тут нет возможностей по манипуляции со включениями/исключениями путей (и их частей) в содержимое архива, как в WinRAR'е. Причём, только на моей памяти Игоря несколько раз просили расширить функционал 7-Zip в этом направлении, но он всякий раз отказывался.

blacks2 29-11-2020 08:56 2941381

Цитата:

Цитата Iska
И всё же, без pushd, Вы никак не получите потребный функционал. »

Спасибо за совет Iska.
Буду порой долбить себе мозг в то направление.

Да, по той причине и решил попробовать прогнать по тестам-сравнениям в вариант с update
Правда знаний как в cmd то собрать - не хватило...

Про Игоря... думаю причина в логике:
- если просто жать - тебе не интересны исключения - бытовой уровень и ок.
- если хорошо жать - тогда тебе нужны solid архивы
- а solid + исключения + словарь = скорее всего не вяжутся логически в алгоритмах/время затратах
- ...тогда если "нужно хорошо жать" = жми все и максимум возможно =)


Время: 19:09.

Время: 19:09.
© OSzone.net 2001-