6

Я хочу извлечь все .zip и .rars в папку и ее детей

Структура выглядит так:

MAIN_FOLDER
    -A folder
        - a.zip
            -a.rar
    -B folder
        - b.zip
            -b.rar
    -C folder
        ....    
            ...

Я пробовал уже это, который не работал

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

)

Я использую Windows и у меня установлен 7-Zip.

Дополнительный вопрос: можно ли сохранить все извлеченные файлы из последних дочерних файлов (a.rar, b.rar) в одну и ту же папку (основную папку)?

6 ответов6

11

Сценарий:

for /F %%I IN ('dir /b /s *.zip *.rar') DO (
    "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)

Объяснение:

for /F %%I IN ('dir /b /s *.zip *.rar') DO (

Это выполняет цикл для каждого файла, возвращаемого командой dir /b /s *.zip *.rar . /s говорит dir рекурсировать в подкаталоги и /b печатает в голом формате.

Имя файла хранится в переменной %%I для последующего использования. Если вы набрали это в приглашении, вы бы использовали %I вместо этого.

"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"

Это выполняет извлечение. Аргумент -o"%%~dpI" извлекает файл в тот же каталог, где находится архив. Другие опции:

  • -o"%%~dpI" - извлекает в каталог, в котором находится архив.

  • -o"%%~dpnI" - Создает новый каталог в иерархии, названной в честь архива, и извлекает его туда (то есть AFolder\archive.zip извлекает в AFolder\archive\).

  • -o"%%~nI" - Создает новый каталог в текущем каталоге, названный в честь архива, и извлекает его там (то есть AFolder\archive.zip извлекает в .\archive\).

  • Опустить аргумент -o - Извлекает в текущий каталог.

Пример:

C:\Temp>tree /F

    Folder PATH listing
    Volume serial number is 08A4-22E0
    C:.
    │   batch.bat
    │
    ├───AFolder
    │       a.zip
    │
    ├───BFolder
    │       b.zip
    │
    └───CFolder
            c.zip



C:\Temp>batch.bat > nul


C:\Temp>tree /F

    Folder PATH listing
    Volume serial number is 08A4-22E0
    C:.
    │   batch.bat
    │
    ├───AFolder
    │       a.zip
    │       a.zip.txt
    │
    ├───BFolder
    │       b.zip
    │       b.zip.txt
    │
    └───CFolder
            c.zip
            c.zip.txt
1

Это обновление принятого ответа для поддержки имен файлов с пробелами ("DELIMS =") и пропуском перезаписи (-aos). Смотрите ссылки ниже и обновленный код. Спасибо

Извлеките все Zip в каталоге (включая подпапки) с помощью файла .bat или команды dos https://stackoverflow.com/questions/12487491/how-to-handle-space-of-filename-in-batch-for-loop http://7zip.bugaco.com/7zip/MANUAL/switches/overwrite.htm

for /F "DELIMS=" %%I IN ('dir /b /s *.zip *.rar') DO (
    "H:\Program Files\7-Zip\7z.exe" x -aos -o"%%~dpI" "%%I"
)
1

Я считаю, что вы ищете команду forfiles:

  • forfiles /s /m *.zip /c "7z x @file"

  • forfiles /s /m *.rar /c "7z x @file"

0
7z e -an -air!*.rar -r

извлекает все RAR-файлы из подпапок текущего каталога (рекурсивно) в текущую папку. Перейдите на -air!* .zip для zip-файлов.

0

Я просто использую sweep.exe лет назад. Он запускает ту же команду в текущем каталоге и во всех подкаталогах.

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

Вы можете использовать что-то вроде:

sweep 7za x -y *.zip

чтобы открыть все .zip файлы в текущей папке и все папки внизу.

Версия командной строки 7zip находится здесь: http://www.7-zip.org/download.html

0
@echo off

FOR /R %%g IN (.) DO TITLE Extracting from %%~ng & "%~dp07z.exe" x -aou "%%g\*.rar" -o"%%g" & "%~dp07z.exe" & CLS

Скопируйте это в текстовый файл и переименуйте его в extract.bat и поместите его в родительскую папку, содержащую другие папки с архивами. Поместите 7z.exe в ту же папку, что и файл extract.bat , или измените путь в приведенной выше команде, чтобы отразить установленное местоположение вашего 7z.exe . Это извлекает все RAR в каждой подпапке в ту же подпапку, что и RAR. Это не делает никакой "уборки дома" (как моя подруга)...

Настройте *.rar в соответствии со своими потребностями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .