Как создать отдельные файлы 7z из каждого выбранного каталога с помощью командной строки 7zip?

7935
Grumpy ol' Bear
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i" 

Выполняет работу для каждого выбранного файла.

Однако у меня есть тонны каталогов (с файлами внутри них, очевидно), мне нужно упаковать.

Допустим, у меня есть d: \ dir1, d: \ dir2, d: \ dir3, d: \ dir4. Мне нужно 7zip, чтобы упаковать их таким образом:

e: \ dir1.7z, e: \ dir2.7z, e: \ dir3.7z, e: \ dir4.7z.

Как мне это сделать в командной строке 7zip?

1

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

2
martineau

Из командной строки вы можете использовать что-то вроде:

FOR /D %i IN (d:\dir*.) DO 7z.exe a "e:\%~ni.7z" "%i" 

В командном файле вам понадобится:

FOR /D %%i IN (d:\dir*.) DO 7z.exe a "e:\%%~ni.7z" "%%i" 

Кстати, вы можете найти справку по FORкоманде, набрав:

help for 

в командной строке.

Обратите внимание, что 7-zip имеет отдельную версию командной строки, которую 7za.exeвы, вероятно, захотите использовать вместо 7z.exe. Он находится в отдельном .zipфайле для загрузки под названием «Версия командной строки 7-Zip», который вы можете найти на странице загрузки 7-Zip .

Я предполагаю, что для разных именованных каталогов это IN (*. *) Вместо этого? Я проверял это, это работает. Просто прошу быть уверенным. Grumpy ol' Bear 13 лет назад 0
IN (*. *) `Будет соответствовать всем подкаталогам того, что находится в текущей папке диск +. Используя что-то вроде `(: \ *. *) `возвращает все каталоги в корневой папке указанного диска. В моем примере `d: \ dir *. *` Будет соответствовать каталогам, имена которых буквально начинаются с букв "dir" в корневой папке диска `d:`. martineau 13 лет назад 0
Кстати, вы также можете буквально перечислить папки, которые вы хотите разделить пробелами. то есть `IN (d: \ some \ folder d: \ another c: \ stuff)`. martineau 13 лет назад 0
1
jfg956

Если у вас есть тонны каталогов, использование подстановочных знаков может привести к некоторым системным ограничениям.

Используя Cygwin или другие инструменты Unix для Windows в качестве UnxUtils, вы можете использовать команду 'find'Unix следующим образом:

cd <source directory> find . -mindepth 1 -maxdepth 1 -type d -exec 7za a /<destination directory>/{}.7z {} \; 

'-mindepth'Важно, чтобы избежать текущего каталога, возвращаемым'find'

Я пытаюсь использовать 7zip до предела, спасибо. Grumpy ol' Bear 13 лет назад 0
Я не думаю, что вы найдете способ избежать оболочки для создания многих файлов 7z. Для каждого файла 7Z, который вы хотите создать, вам нужно будет вызвать 7za. Команда find выше вызывает 7z для каждого каталога в(exec аргумент). Может быть, кто-то еще сможет дать вам оболочку Windows, эквивалентную моей оболочке Unix выше. jfg956 13 лет назад 0
Метод Мартино отлично работает. Grumpy ol' Bear 13 лет назад 0
Да, метод Мартино - это чистый способ Windoze сделать это, не затрагивая утилиты UNIX. Но будьте осторожны с количеством каталогов, возвращаемых '(d: \ dir *.)': Если оно огромно, оно может сломаться, как в UNIX (я хотел бы узнать мнение эксперта по оболочке Windows на этот счет, пожалуйста ). jfg956 13 лет назад 0
Я использую Windows 7, и я не касаюсь Unix / Linux только для этого. Спасибо, но нет. Grumpy ol' Bear 13 лет назад 0

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