解压缩所有子文件夹中的所有zip文件

时间:2017-02-15 15:32:45

标签: windows batch-file cmd directory

使用cmd批处理文件如何迭代目录中的所有文件夹并解压缩每个文件夹中的所有zip文件?我已经能够迭代遍历所有子文件夹,但我无法在每个子文件夹中进行迭代。

FOR /D %%R IN ("*") DO FOR /D %%S IN (*/%RR) unzip %%S

文件夹结构

folder\subfolder1\zip1
folder\subfolder2\zip2
folder\subfolder3\zip3
folder\subfolder4\zip4

我想在其中提取每个zip文件的内容包含文件夹。 zip文件和子文件夹有不同的名称。

2 个答案:

答案 0 :(得分:1)

for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps

我认为您示例中的 zip1 文件是 zip1.zip ,并且每个子文件夹中可能有更多的zip文件。但如果没有,这也适用于一个zip文件。在 .zip

的zip文件的脚本底部有一个替代方案。

我用于测试的这些文件。 “子文件夹”中有一个有意义的空间,因为使用空格对路径名测试批处理脚本总是好的。

C:\temp\folder\sub folder1\zip1.zip
C:\temp\folder\sub folder1\zip1b.zip
C:\temp\folder\subfolder2\zip2.zip
C:\temp\folder\subfolder2\zip2b.zip
C:\temp\folder\subfolder3\zip3.zip
C:\temp\folder\subfolder3\zip3b.zip
C:\temp\folder\subfolder4\zip4.zip
C:\temp\folder\subfolder4\zip4b.zip

解压缩不是Windows命令。它可以来自许多来源,因此其参数的格式可能不同。在我的例子中,我使用的是7zip 无论如何,您可能需要使用任何解压缩实用程序(或CD)指定输出目录。我的示例显示了如何获取其名称。最后有一个斜线,7z很好,但可能是其他实用程序的问题。它可以摆脱它,但它需要更多的代码。

您要求将所有zip文件解压缩到自己的目录中。但是如果两个zip文件包含具有相同名称的文件,它们将相互覆盖,这就是为什么可能更希望将每个zip解压缩到它自己的文件夹,其名称与zip文件相同。为此,必须创建文件夹,整个脚本应该有多行。

/ d 的不信任 这就是为什么我还包括 for / f 版本,它使用了dir命令

如果您想要更加递归地使用此命令,使用更深的路径,例如:folder\subfolder3\more\paths\zip1.zip,这是可能的。只需使用下面示例中的for /f,然后将/s添加到dir命令:'dir *.* /s /ad /b'

此命令应该按照您的要求执行:
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"

这是整个测试用例脚本:

@echo off

echo ******
echo List all zip files using for /f
echo ******
for /f "tokens=*" %%r in ('dir *.* /ad /b') do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps

echo.
echo ******
echo List all zip files using for /d
echo ******
for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps

echo.
echo 1: extract to folders containing zip files - possible overwrites
echo 2: extract each zip to a folder named by the name of the zip file
choice /c 12
if not errorlevel 2 (

    for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"

) else (

rem ------ this is the alternative to extract each zip to its own folder
    for /d %%r in (*) do for %%s in ("%%r\*.zip") do (
        echo.
        echo ******
        echo *** Unzipping: %%s to folder: %%~dpns
        mkdir "%%~dpns"
        7z x -y "%%s" -o"%%~dpns"
    )
rem ------

)
pause

exit /b

In case zip files does not have .zip extension:

    for /d %%r in (*) do for %%s in ("%%r\*.*") do (
        echo.
        echo ******
        echo *** Unzipping: %%s to folder: %%~dpns-unzipped
        mkdir "%%~dpns-unzipped"
        7z x -y "%%s" -o"%%~dpns-unzipped"
    )

答案 1 :(得分:0)

尝试使用zipjs.bat

@echo off

for /r %%s in (*.zip) do (

    call zipjs.bat unzip -source "%%~fs" -destination "%%~dpns" -keep yes -force yes
)