73

У меня есть следующая структура папок:

  • корень
    • folder1
    • folder2
    • folder3
    • 7za.exe

Я хочу запустить инструмент командной строки 7-zip, чтобы сжать все файлы в folder1 в zip-файл с именем folder1.zip .

Запуск следующего

7za.exe a -tzip folder1.zip folder1\\*.*

производит ZIP-файл, как и ожидалось. Однако, когда я открываю zip-файл, в нем есть папка с именем folder1 , и внутри него у меня есть все файлы, которые были в этой папке. Я не хочу, чтобы имя папки добавлялось в zip-папку, т.е. я хотел бы добавить все файлы в формате "Flat".

Я также не хочу рекурсивно запускать инструмент командной строки для каждого отдельного файла / папки.

Есть ли переключатель, который обеспечивает эту функциональность?

4 ответа4

120

Из файла справки 7-Zip :

команда (Добавить)

Добавляет файлы в архив.

Примеры

7z a archive1.zip subdir\

добавляет все файлы и подпапки из папки subdir в архив archive1.zip. Имена файлов в архиве будут содержать префикс subdir\.

7z a archive2.zip .\subdir\*

добавляет все файлы и подпапки из папки subdir в архив archive2.zip. Имена файлов в архиве не будут содержать префикса subdir\.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Имена файлов в архиве c:\archive3.zip будут содержать префикс dir2\dir3\, но они не будут содержать префикс c:\dir1\.

Таким образом, команда, которую вы хотите, будет: 7za.exe a folder1.zip .\folder1\*

Также обратите внимание на обработку символов подстановки в 7-Zip. Он не обрабатывает *.* Как "все файлы" - это означает "все файлы с точкой в имени файла". Файлы без расширения будут пропущены. Если вам действительно нужны все файлы, просто используйте * .

Наконец, параметр -tzip не требуется, если имя файла архива заканчивается на .zip . 7-Zip достаточно умен, чтобы выяснить, какой формат вы хотите в этих случаях. Требуется только в том случае, если вам нужно собственное расширение (например, 7za.exe a -tzip foo.xpi <files> для дополнения Mozilla).

2

Это сработало для меня

Рассмотрим структуру папок, например C:\Parent\SubFolders ..... И вы хотите создать parent.zip, который будет содержать все файлы и папки C:\Parent без родительской папки [то есть он будет начинаться с SubFolders .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Это создаст Parent.zip в C:\Parent

0

Просто чтобы расширить принятый ответ (я не смог добавить комментарий там):

В Linux добавление «*» для меня не сработало, поэтому я придумал более подробную командную строку, которая дала желаемый результат:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

объяснение сценария:

  • сохранить текущий путь к каталогу для последующего использования;
  • перейдите в каталог, который необходимо заархивировать;
  • создать архив (заметка «.» (точка) в конце);
  • вернуться к первоначальному каталогу;
  • избавиться от переменной, в которой хранится исходный путь к каталогу

Я надеюсь, что это может быть полезно для кого-то.

-1

Как насчет этого. например, папка / подпапка1, папка / подпапка2

выберите все подпапки> щелкните правой кнопкой мыши, затем создайте архив> выберите любой формат

* Имя архива будет родительской папкой.

Просто верно?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .