Как извлечь все ZIP-файлы из подпапок с помощью 7-Zip в Windows 7

Как извлечь все ZIP-файлы из подпапок с помощью 7-Zip в Windows 7

У меня большая древовидная структура папок Windows 7, содержащая множествоПочтовый индексфайлы. Это однослойные ZIP-файлы (не ZIP в ZIP). Какую команду 7-Zip можно использовать для разбора этой структуры папок, поиска каждого ZIP-файла по расширению файла (см. пример), извлечения его (удаления ZIP-файла и оставления извлеченных файлов) в то же место?

Пример: Все файлы в иерархии папок называются примерно так: abc.mp3.zip или xyz.jpg.zip - собственное расширение файла, за которым следует ".zip". Я хочу, чтобы 7-Zip находил все файлы в дереве по расширению файла с использованием подстановочных знаков (*.mp3.zip, *.jpg.zip и т. д.) и извлекал их в текущее местоположение, не создавая новых папок, так что результатом будут abc.mp3 и xyz.jpg.

решение1

Насколько я могу судить, в 7-zip нет команды, которая делает то, что вы ищете. Вот скрипт пакетного файла Windows, который, я думаю, сделает то, что вам нужно. Его следует запускать из командной строки, чтобы вы могли указать путь к корню дерева папок для обработки.

Файлunzipper.bat

@echo off
setlocal
if "%1"=="" goto Usage

call :Get7zCmd
:: Recurse folder passed in as paramater
for /r %1 %%Z in (*.zip) do (
    echo ====
    rem Change to the directory of zip file
    cd /d "%%~dpZ"
    rem Extract all files to current directory
    echo %_7zCmd% e "%%~nxZ" -y
    rem Delete the zip file
    echo del "%%~nxZ"
)
goto End

:Usage
echo.
echo Parses through folder structure starting at the specified path, finding
echo and extracting the contents of all zip files found, and then deletes
echo the zip file.
echo.
echo Usage:
echo     %~n0 root-directory-path
echo.
echo     For example:
echo.
echo %~n0 "D:\some folder"

:End
goto :EOF

:: ==========================
:: Subroutine Get7zCmd
:: Determines the full path to 7-zip command-line executable from the Windows
:: Registry and sets the variable "_7zCmd" to the result.
:Get7zCmd
set Reg.Key=HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe
set Reg.Val=Path
for /F "Tokens=2*" %%A in ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| find /I "%Reg.Val%"') do call set PathDirectory=%%B
set _7zCmd="%PathDirectory%%\7z.exe"
exit /b 0

Поскольку в целом то, что делает скрипт, довольно радикально и потенциально разрушительно, поскольку он может извлечь большое количество файлов и удалить много zip-файлов впоследствии, я отключил команды в строках 12 и 14, которые делают это, добавив к ним префикс echo. Это заставит их просто вывести то, что они сделали бы, если бы echoне было . Таким образом, вы можете сначала протестировать скрипт, не нанося никакого ущерба вашей файловой системе, если возникнет какая-то непредвиденная проблема.

Чтобы изменить скрипт, чтобы он действительно выполнял эти действия, вам нужно будет удалить echoв каждой из двух строк. Стандартный отказ от любой ответственности, конечно, применяется.

Связанный контент