Опираясь на ответ @ 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