Рекурсивная распаковка с 7z.exe - PullRequest
4 голосов
/ 23 января 2012

Я наткнулся на нижнюю строку как средство извлечения каждого файла .zip в каждой подпапке.

FOR /F "usebackq" %a in (`DIR /s /b *.zip`) do 7z.exe e %a

Я пробовал это в приглашении WinXP cmd.exe, и я получаю сообщение об ошибке:

"a was unexpected at this time."

Может кто-нибудь, пожалуйста, скажите мне, что не так с приведенной выше строкой. Это ошибка 7z.exe или что-то не так с синтаксисом пакетного скрипта. Я вырезал и вставил это в файл .bat.

Приветствия

Ответы [ 3 ]

9 голосов
/ 24 января 2012

Попробуйте изменить % a на %% a :

FOR /F "usebackq" %%a in (`DIR /s /b *.zip`) do 7z.exe e %%a
8 голосов
/ 24 января 2012

прочитайте HELP FOR и попробуйте следующее в командной строке ...

FOR /R %a IN (*.zip) DO @ECHO 7z e "%a"

обратите внимание, что мы вложили% a в "

Как только вы проверили правильность вывода, удалите ECHO. Я бы предложил перенести команду в BAT-файл. В этом случае измените% a на %% a

@echo off
FOR /R %%a IN (*.zip) DO (
  7z e "%%a"
)
5 голосов
/ 13 сентября 2013

Опираясь на ответ @ PA. (Не забудьте удалить @echo, когда вы убедились, что вывод соответствует вашему желанию), если вы хотите сохранить структуру каталогов внутри zip-файла, используйте * 1002Команда * вместо e:

FOR /R %a IN (*.zip) DO @echo 7z x "%a"

И если вы хотите извлечь файлы в папку с тем же именем, что и соответствующий им zip-файл, используйте переключатель -o и имя файла %~nПрефикс экстрактора:

FOR /R %a IN (*.zip) DO @echo 7z x "%a" -o"%~na"

Наконец, если вы хотите выполнить все вышеперечисленное и перезаписать любые существующие файлы, используйте переключатель -aoa:

FOR /R %a IN (*.zip) DO @echo 7z x "%a" -o"%~na" -aoa

Полезные ресурсы

Пакетный файл

Вот оно, все сжато.Ниже приведен пакетный скрипт, который будет работать для всех zip-файлов в текущей папке (при условии, что установлен 7zip).По умолчанию echo определяет, какие команды будут запускаться , и запускается только при вводе /y (как, да, пожалуйста, распакуйте сейчас).

:: To actually include the path expansion character (tilde), I had to give valid numbers; see http://ss64.com/nt/rem.html for bug reference. Also, try call /? for more info.
@REM The %~n0 extracts the name sans extension to use as output folder. If you need full paths, use "%~dpn0". The -y forces overwriting by saying yes to everything. Or use -aoa to overwrite.
@REM Using `x` instead of `e` maintains dir structure (usually what we want)

@FOR /R %%a IN (*.zip) DO @(
    @if [%1] EQU [/y] (
        @7z x "%%a" -o"%%~dpna" -aoa
    ) else (
        @echo 7z x "%%a" -o"%%~dpna" -aoa
    )
)

@echo USAGE: Use /y to actually do the extraction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...