Как мне создать отдельные zip-файлы для каждого выбранного файла / каталога в 7zip?

81362
Grumpy ol' Bear

Это внутренний упаковщик zip от Total Commander:

Изображение диалогового окна упаковщика почтового индекса Total Commander.

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

24

3 ответа на вопрос

44
Goyuix

Я не уверен, что вы можете делать то, что вы предлагаете, используя графический интерфейс пользователя, но вы, безусловно, можете из командной строки:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i" 

Вам нужно сначала сменить каталог ( cdкоманду) на F:\Downloadsкаталог или любой другой каталог, который вы хотите выполнить массовое сжатие. Также достаточно просто заменить * .exe или любое другое расширение, по которому вы хотите фильтровать, чтобы просто сжать эти документы.

И секретный декодер звонит:

  • %i переменная, которая содержит имя файла для каждого шага в цикле
  • (*.*) это критерии выбора, это может быть просто * .exe или аналогичный
  • 7z.exe версия командной строки 7-Zip
  • %~ni - это расширяет переменную% i только до имени файла - без расширения

Если вы хотите просто добавить папки для данного каталога, команда немного сложнее, поскольку по умолчанию FOR просто работает с файлами. Нам нужно предоставить ему дополнительную информацию:

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i" 

Это работает из-за нескольких частей того, что кажется магией:

  • /F говорит FOR перебирать расширенное значение в ()
  • usebackq говорит FOR, что я собираюсь передать команду и использовать вывод для итерации
  • delims=?говорит FOR, что я хочу разбить токены на ?- недопустимый символ в именах файлов и каталогах. Я хочу только один токен.
  • /BВ DIRдля голого формата - только имя
  • /A:DВ DIRдля ограничения результатов по атрибуту, то D для каталогов

Если вы хотите инкапсулировать это внутри пакетного файла, единственное изменение, которое вам нужно будет сделать, это дважды экранировать переменную% i:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i" 
Да, кроме твоего 7z архива, я хочу zip архив! Так что вместо% ~ ni.zip? Grumpy ol' Bear 13 лет назад 0
Еще лучше, я хочу zip или 7z с ультра-компрессией. И упакуйте его в d: \ упакованный. Но пока ваш метод работает! Grumpy ol' Bear 13 лет назад 0
Понял. Спасибо! ДЛЯ% i IN (*. *) DO 7z.exe a "i: \ pack \% ~ ni.7z" "% i" -mx9 Grumpy ol' Bear 13 лет назад 1
Кстати, вы можете показать мне, как это сделать в командном файле? т.е. sperate-archive.bat Grumpy ol' Bear 13 лет назад 0
Спасибо, а как мне добавить целые папки в этот скрипт, пожалуйста? Grumpy ol' Bear 13 лет назад 0
Я имею в виду, что у меня более 600 папок, и я хочу, чтобы они были упакованы отдельно как 7z. Grumpy ol' Bear 13 лет назад 0
11
jftuga

Мне нравится ответ Goyuix. Однако, если вы используете Windows 7 (или у вас установлена ​​Power Shell), а также используете версию 7-zip 7za.exe для командной строки, вы можете запустить эту команду:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name } 

Вы также можете изменить «dir» на «dir * .exe», чтобы выбрать только исполняемые файлы.

Приятной особенностью Power Shell является то, что вы работаете с объектами, а не со строками. Таким образом, вы можете получить действительно конкретную информацию, если хотите. Например:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name } 

Это будет включать только файлы, которые:

  1. иметь расширение CSV
  2. размером менее 18 900 байт
  3. последнее изменение 1 июля 2011 года или после этой даты

РЕДАКТИРОВАТЬ Если вы хотите zip-файлы вместо 7-zip-файлов, используйте вместо этого zip.exe InfoZip .

7-zip также может создавать zip-файлы - посмотрите на флаг -t. Пример: `7z a -tzip archive.zip * .exe` Goyuix 13 лет назад 3
Хорошо, $ _. BaseName $ _. Name работает, но как мне сделать $ _. BaseName $ _. Name на другом диске, в другом каталоге? Скажите f: \ test \ file1.7z и т. Д. Grumpy ol' Bear 13 лет назад 0
0
Mxx

Вы можете скачать и установить плагин 7zip для Total Commander с http://www.ghisler.com/plugins.htm. Как только вы сделаете это в правой части окна на скриншоте, появится еще один вариант сжатия 7zip. С помощью этой опции вы можете выполнить именно то, что вы просите.

Похожие вопросы