Командная строка 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
, это создаст каталоги, но только для извлечения, а не для сжатия.