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

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

nfs911 08-01-2016 00:14 2592291

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

Iska 08-01-2016 06:28 2592338

А если не гуглить, а просто прочитать справку 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 2592366

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 2592376

Цитата:

Цитата nfs911
ошибка "Duplicate filename" »

Подобная ошибка возникает, если в файле list.txt имеются повторяющиеся строки (указывающие на один и тот же файл\папку).

nfs911 08-01-2016 12:40 2592388

gora, так оно и есть. Мне нужно объединить(слияние) несколько папок с одинаковыми названиями (и структура повторяется). Только файлы разные.

Iska 08-01-2016 13:03 2592392

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

nfs911 08-01-2016 13:48 2592401

Вложений: 1
Iska, идея проста...см.пример.
Задача: собрать архив из разных источников файлов с идентичной структурой.
Представьте что папки это структура,а файлы это детали. Продукт один,а детали разные.

Iska 08-01-2016 13:57 2592406

Цитата:

Цитата nfs911
Iska, идея проста... »

Ну, так озвучьте её. Ибо мне она совершенно неизвестна.

nfs911 08-01-2016 14:01 2592407

Iska, пример приложил. Задачу озвучил.

Iska 08-01-2016 14:36 2592414

nfs911, Вы хотите получить в итоговом архиве такую:
Код:

\
│  FileX.txt

└───SubDir0
    │  FileY.txt
    │
    └───SSDir0
            FileZ.txt

структуру?

gora 08-01-2016 15:12 2592429

Цитата:

Цитата nfs911
пример приложил. Задачу озвучил. »

Боюсь, что 7-Zip не сможет выполнить Вашу задачу.
Либо пакуйте с родительскими папками:
Код:

.\Dir0
.\Dir1
.\Dir2

Либо объединяйте Ваши папки батником и результат упаковывайте, не перекладывая объединение на архиватор.

Georgio 08-01-2016 15:16 2592431

Цитата:

Цитата nfs911
Мне нужно объединить(слияние) несколько папок с одинаковыми названиями (и структура повторяется). Только файлы разные. »



Код:

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

Да, 7-Zip этого пока не умеет, в отличие от WinRAR (параметр «-EP1» — исключить базовую папку из имён). Потому, либо, как Вы озвучили:
Цитата:

Цитата gora
Либо объединяйте Ваши папки батником и результат упаковывайте, не перекладывая объединение на архиватор. »

либо N вызовами архиватора по числу путей, как у коллеги Georgio (либо с переходами в папки/возвращениями).

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

nfs911 08-01-2016 15:52 2592450

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

Georgio 08-01-2016 16:46 2592482

Цитата:

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

Цитата:

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

Цитата:

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

BASH чтоли?))

Georgio 08-01-2016 17:11 2592489

nfs911, Bash напоминает, но поскольку я имел в виду скриптовые языки Windows, то этот пример напоминает конструкцию на PowerShell.

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


Время: 18:32.

Время: 18:32.
© OSzone.net 2001-