Пакетная распаковка всех 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:-)