如何在 Windows 7 上使用 7-Zip 提取子文件夹中的所有 ZIP 文件

如何在 Windows 7 上使用 7-Zip 提取子文件夹中的所有 ZIP 文件

我有一个很大的 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两行中的 。当然,标准免责声明适用。

相关内容