PDA

Показать полную графическую версию : [решено] 7zip консольное добавление в архив с заменой


nfs911
08-01-2016, 00:14
Всем доброго времени суток!
Пытаюсь сделать следующее: Добавить в существующий архив файлы\каталоги по списку
но дело в том что ошибка "Duplicate filename"
нагуглил опцию -u и родилась такая команда 7z a TEST.zip @list.txt -ur2x2y2z2w2
но все-равно выдает ошибку о дубликате...
в GUI версии мы просто нажимаем ОК для подтверждения добавления и замены но в консольном варианте что-то не выходит.
Помогите))

Iska
08-01-2016, 06:28
А если не гуглить, а просто прочитать справку 7-Zip по этому параметру? И почему бы Вам просто не использовать команду «u»:
u (Update) command

Update older files in the archive and add files that are not already in the archive.

вместо параметра «-u»?

nfs911
08-01-2016, 11:15
Iska, я нагуглил русскую справку от многоуважаемого Gora и предложенный вами не работает(Duplicate filename) или я что-то делаю не так:
вот так пробовал
7z u TEST.zip @list.txt
7z u TEST.zip @list.txt -ur2x2y2z2w2
7z u TEST.zip @list.txt -ur2x1y2z1w2
в справке написано что если не указывается второй архив то пакуется в тот-же.

gora
08-01-2016, 12:01
ошибка "Duplicate filename" »
Подобная ошибка возникает, если в файле list.txt имеются повторяющиеся строки (указывающие на один и тот же файл\папку).

nfs911
08-01-2016, 12:40
gora, так оно и есть. Мне нужно объединить(слияние) несколько папок с одинаковыми названиями (и структура повторяется). Только файлы разные.

Iska
08-01-2016, 13:03
nfs911, Вы чего-то не договариваете.


Упакуйте Ваш «list.txt» в архив, приложите к сообщению, либо выложите на RGhost.
Опишите словами, какую Вы поставили себе задачу (без упоминания 7-Zip и «добавление/обновление архива»).

nfs911
08-01-2016, 13:48
Iska, идея проста...см.пример.
Задача: собрать архив из разных источников файлов с идентичной структурой.
Представьте что папки это структура,а файлы это детали. Продукт один,а детали разные.

Iska
08-01-2016, 13:57
Iska, идея проста... »
Ну, так озвучьте её. Ибо мне она совершенно неизвестна.

nfs911
08-01-2016, 14:01
Iska, пример приложил. Задачу озвучил.

Iska
08-01-2016, 14:36
nfs911, Вы хотите получить в итоговом архиве такую:
\
│ FileX.txt

└───SubDir0
│ FileY.txt

└───SSDir0
FileZ.txt
структуру?

gora
08-01-2016, 15:12
пример приложил. Задачу озвучил. »
Боюсь, что 7-Zip не сможет выполнить Вашу задачу.
Либо пакуйте с родительскими папками:.\Dir0
.\Dir1
.\Dir2
Либо объединяйте Ваши папки батником и результат упаковывайте, не перекладывая объединение на архиватор.

Georgio
08-01-2016, 15:16
Мне нужно объединить(слияние) несколько папок с одинаковыми названиями (и структура повторяется). Только файлы разные. »



@echo off
del /f /q TEST.zip
copy 0.zip TEST.zip
<list.txt (for /f "delims=" %%i in ('more') do 7z u TEST.zip "%%i")
pause

Iska
08-01-2016, 15:28
Да, 7-Zip этого пока не умеет, в отличие от WinRAR (параметр «-EP1» — исключить базовую папку из имён). Потому, либо, как Вы озвучили:
Либо объединяйте Ваши папки батником и результат упаковывайте, не перекладывая объединение на архиватор. »
либо N вызовами архиватора по числу путей, как у коллеги Georgio (либо с переходами в папки/возвращениями).

Georgio, напомните, почему было выбрано именно «<list.txt (for /f … ('more')» вместо простого «for /f … ("list.txt")»?

nfs911
08-01-2016, 15:52
Iska, Georgio, gora, Всех благодарю за участие. Буду юзать WinRAR или как было - множественный вызов.
Georgio, действительно,почему?)))

Georgio
08-01-2016, 16:46
Georgio, напомните, почему было выбрано именно «<list.txt (for /f … ('more')» вместо простого «for /f … ("list.txt")»? »
Georgio, действительно,почему?))) »



Такое использование команды "MORE" (или иногда и других команд, поддерживающих синтаксические конструкции типа "<файл команда" или "команда 1| команда 2") является необходимым элементом для создания, как я это называю, "блочно-конвейерной" структуры кода, которая может быть иногда крайне удобной и делает язык Batch настоящим языком программирования.

Например, можно испрльзовать такую "конвейерную цепочку": <"исходный файл" (for /f ... %%i in ('more') do @7z ...)| (for /f ... %%i in ('more') do @какая-нибудь команда для обработки текста вывода команды "7z")>"выходной файл".

Какой скриптовый язык напоминает вам этот пример?

nfs911
08-01-2016, 16:52
Какой скриптовый язык напоминает вам этот пример? »BASH чтоли?))

Georgio
08-01-2016, 17:11
nfs911, Bash напоминает, но поскольку я имел в виду скриптовые языки Windows, то этот пример напоминает конструкцию на PowerShell.

Конечно, такие "конвейерные построения" могут наталкиваться на "подводные камни", но большинство из этих "камней" устранимо при решении какой-нибудь конкретной задачи.




© OSzone.net 2001-2012