Как извлечь все архивы в подкаталогах этой папки?


18

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

Ответы:


22

Во-первых, установите 7-zip .

Создайте batфайл в корне каталога, содержащий много подкаталогов с архивами внутри. Затем вставьте следующее в:

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\7-zip\7z.exe" x "%%X"
        )
    popd
)

Запустите летучую мышь, и все rar / zips будут извлечены в папку, в которой они содержатся.

Как это работает?

FOR / D / r %% F in ("*") DO (

Чтобы цикл зациклил все папки в текущем каталоге и поместил путь в переменную %%F.

pushd% CD%

Поместите текущий каталог, в котором мы находимся в памяти.

кд %% F

Установите папку из переменной %%Fв качестве текущего каталога.

FOR %%X in (*.rar *.zip) DO (

Для всех rarи zipфайлов в текущей папке, сделайте следующее :

"C:\Program Files\7-zip\7z.exe" x "%%X"

Запустите 7-zip для файлов. Кавычки нужны, %%Xпотому что в некоторых именах файлов есть пробелы.

popd

Вернитесь в предыдущий каталог, который мы ранее сохранили в памяти.

Надеюсь, это кому-нибудь пригодится.


3

У меня были проблемы с запуском скрипта из Windows Vista. Когда я запустил код ничего не случилось. Мне нужно было быть администратором, чтобы иметь возможность запускать скрипт. Когда я щелкнул правой кнопкой мыши по файлу .bat и «запустил с правами администратора», он не сработал, потому что он по какой-то причине запустился в папке system32 (если я правильно помню). Чтобы решить эту проблему, просто используйте переменную среды Windows (объясняется здесь: переменные среды Windows )% ~ dp0, чтобы переключиться обратно в каталог, из которого был запущен скрипт.

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x %%X
    )
popd
)

Убедитесь, что файлы * .rar или * .zip не находятся на том же уровне, что и скрипт. Они должны быть на один уровень ниже.

Надеюсь, этот комментарий кому-то помог.


Это работало нормально для меня. Мне пришлось изменить путь к «C: \ Program Files (x86)» из «C: \ Program Files», так как я использую 64-разрядную версию Win 7.
Contango

1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Запускает рекурсивный поиск в текущем каталоге, находит все файлы, оканчивающиеся на .zip, затем направляет их в цикл. Для каждого файла, который он находит, он запускает команду unzip для файла с выводом, перенаправленным в каталог файла.


1

Ответы выше работают, однако, если вы работаете Windows 64-bitи 7-Zip 32-bit, правильный путь C:\Program Files (x86)\7-Zipдля 7-Zip. Ниже приведен сценарий, который работал для меня.

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files (x86)\7-zip\7z.exe" x %%X
    )
    popd
)

Если у вас установлена ​​64-разрядная версия 7zip, правильный путь будет следующим: «C: \ Program Files \ 7-zip \ 7z.exe», как указано в исходном ответе.
Рон Адамс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.