Назад | Перейти на главную страницу

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

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

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

Создать 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 / zip-архивы будут извлечены в папку, в которой они содержатся.

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

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

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

pushd% CD%

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

cd %% F

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

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

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

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

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

popd

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

Надеюсь, это кому-то будет полезно.

У меня возникла проблема с запуском сценария из 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 не находятся на том же уровне, что и сценарий. Они должны быть на один уровень ниже.

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

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

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

Однако приведенные выше ответы работают, если вы используете 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
)