Командная строка 7-zip

Я создаю утилиту резервного копирования, которая застегивает все файлы, перечисленные в текстовом файле. Я использую MS ACCESS в качестве моего front-end и 7-Zip для сжатия. Это команды, которые я использую:

7zG.exe a c:\Backup\backup.zip
@c:\temp\tmpFileList.txt

Все файлы сжимаются без их пути. Есть ли способ включить путь для каждого файла в zip файле? Затем, когда backup.zip будет извлечен, файлы будут восстановлены в исходную структуру папок.

Спасибо

Ответ 1

В этот поток 7-zip-форума, в котором многие люди выражают свое желание этой функции, разработчик 7-zip Igor указывает на Вопрос с вопросом под названием "Как я могу хранить полный путь файла в архиве?" для достижения аналогичного результата.

Короче:

  • отдельные файлы по объему (один список для файлов на C:\, один для D:\ и т.д.)
  • то для каждого списка томов,
    • chdir в корневой каталог соответствующего тома (например, cd /d C:\)
    • создать список файлов с путями относительно корневого каталога тома (например, C:\Foo\Bar станет Foo\Bar)
    • выполнить 7z a archive.7z @filelist по-прежнему с этим новым списком файлов
    • при извлечении с полными путями убедитесь, что chdir в соответствующий корневой каталог тома

Ответ 2

Программа командной строки для 7-Zip - 7z или 7za. Здесь полезный пост о доступных вариантах. Параметр -r (recurse) сохраняет пути.

Ответ 3

Я не рассматривал это, но стрелял из бедра, я бы сказал, что они отказались от поддержки командной строки в переносном устройстве. Причина, по которой люди не делают много средств командной строки в переносных приложениях, - это то, что ОС (окна в вашем случае) требует, чтобы исполняемые файлы были добавлены в список включения% path%.

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

7z -a.

будет

d:\portable\z7\z7 -a c:\to\archive\folder *. *

Ввод текста для всего - вот почему GUI имеет смысл с такими вещами, как портативные приложения, которые он (приложение) может запомнить в своем собственном местоположении и обрабатывать эти вещи для вас, и если вы не можете запустить его, вы знаете, что он не подключен.

Если вы действительно хотите, чтобы переносимое приложение содержало это, хотя вы всегда можете установить полную версию и вытащить требуемый файл 7z.exe и поместить его в переносную папку, убедившись, что он нужен с необходимой DLL.

Вам нужно будет установить свой путь, когда вы нажмете на оболочку, после того как убедитесь, что она установлена.

http://www.redfernplace.com/software-projects/patheditor/ - хороший редактор путей (вниз) полезно, если у вас много информации о пути 20+, трудно читать.

http://www.softpedia.com/get/System/System-Miscellaneous/Path-Editor.shtml - источник в Интернете для редактора путей

Не рекомендуется изменять ваш системный путь для темных "портативных" дисков, хотя вручную используйте это:

set path =% path%; "d:\portable\z7 \";

при запуске dos cmd.exe или http://sourceforge.net/p/conemu/home/Home/

В других ответах лучше решать другие проблемы. Я не собираюсь пытаться.

http://www.codejacked.com/zip-up-files-from-the-command-line/ - хорошая ссылка на использование командной строки для z7 и z7a.

PS: извините за necro, но я решил, что для этого нужен более прямой ответ на вопрос почему (даже если это просто умозрительно).

Ответ 4

Так как 7-zip-версия 9.25 alpha содержит новый переключатель -spf, который можно использовать для хранения полных путей файла, включая букву диска, в архив.

7zG.exe a -spf c:\BAckup\backup.zip @c:\temp\tmpFileList.txt

должен работать нормально сейчас.

Ответ 5

7-Zip ищет относительные пути в файле списка, иначе он будет хранить только имена файлов, что приведет к ошибке повторяющегося имени файла.

Предполагая, что ваш список содержит полные имена путей:

  • Отредактируйте файл списка, чтобы удалить префикс диска, C:\
  • Убедитесь, что вы находитесь в корневом каталоге диска, когда вы запускаете 7Z для использования вышеуказанного файла списка.
  • Затем он сохранит пути и не будет жаловаться на дублирующее имя. Он хочет относительные пути в файле списка.

Если в вашем файле списка есть пути относительно другой папки, вы должны запустить 7Z из этой папки.

Обновление: я заметил из другого сообщения выше, что новый 7-Zip имеет параметр -spf, который не требует вышеуказанных шагов. Не тестировал его еще, но мои шаги для более ранних версий, которые не имеют этой опции.

Ответ 6

Вместо опции a используйте опцию x, это создаст каталоги, но только для извлечения, а не для сжатия.