Пакетная распаковка всех ZIP-архивов в подкаталогах; содержимое каждого архива извлекается в новый каталог с именем архива

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

Мне было интересно, как распаковать эти файлы в папку, названную в честь zip-файла. Так, например:

C:\Archives\Photos\A.zip
C:\Archives\Videos\B.zip
C:\Archives\Documents\C.zip

превратится в

C:\Archives\Photos\A\
C:\Archives\Videos\B\
C:\Archives\Documents\C\

Я могу сделать это в настоящее время, но только если я делаю это по одной папке за раз, мне было интересно, есть ли способ сделать это все сразу, я думал о файле.bat.

2 ответа

@Echo off
For %%F in (Photos,Videos,Documents) Do (
    For /F "delims=" %%Z in ('Dir /B/S/A-D "C:\Archives\%%F\*.zip" 2^>Nul') Do (
        7z x "%%~fZ" -o"%%~dpnZ\" && Rem Del "%%~fZ"
    )
)

Если вы хотите удалить ZIP-файл после его разархивирования, удалите Rem перед дель.

Пакет использует для переменных ~ модификаторы, чтобы использовать только части полного имени файла

PowerShell с одним вкладышем для достижения этой цели:

Get-ChildItem -Filter *.zip -Recurse C:\Archives | % { $_.FullName } | Split-Path | Get-Unique | % { cd $_ ; &'C:\Program Files\7-Zip\7z.exe' x *.zip -o* }

Вот объяснение каждого раздела, который передается в следующий раздел и, таким образом, выполняется Powershell по порядку:

  • Get-ChildItem -Filter *.zip -Recurse C: \ Archives: найти все zip-файлы в C: \ Archives
  • % {$ _. FullName}: для каждого результирующего объекта показывать полный путь и имя
  • Split-Path: показать только путь (не имя файла) каждого почтового индекса
  • Get-Unique: удалить дубликаты из этого списка
  • % {cd $ _; & 'C: \ Program Files \ 7-Zip \ 7z.exe' x *.zip -o*}: наконец, используйте созданный список, чтобы перейти в каждый найденный каталог; используйте 7z.exe, чтобы разархивировать все zip-файлы, найденные в каждом каталоге, с аргументом -o*, чтобы разархивировать содержимое каждого zip-файла в каталог с именем этого zip-файла.

Предположения:

  • C: \ Archives - это каталог, в котором хранятся все ваши zip-файлы.
  • Ваш 7-Zip установлен в папку по умолчанию

Исследуя этот вопрос, я пришел к выводу, что предпочитаю bash PowerShell:-)

Другие вопросы по тегам