4

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

Мне было интересно, как распаковать эти файлы в папку, названную в честь 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 ответа2

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 перед del.

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

1

Однострочная оболочка 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 :-)

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