windows - 解压所有子文件夹中的所有 zip 文件

标签 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 文件和子文件夹具有不同的名称。

最佳答案

for/d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---使用输出文件夹 %%~dps 解压缩 %%s


我认为您示例中的 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

unzip 不是 Windows 命令。它可以来自许多来源,因此其参数的格式可能有所不同。在我的示例中,我使用 7zip。
无论如何,您可能需要使用任何解压缩实用程序(或 CD)指定输出目录。我的示例展示了如何获取其名称。末尾有一个斜杠,这对于 7z 来说没问题,但对于其他实用程序可能会出现问题。可以摆脱它,但需要更多代码。

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

/d存在不信任
这就是为什么我还包含使用 dir 命令的 for/f 版本

如果您希望以更深的路径递归地使用此命令,例如: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"
    )

关于windows - 解压所有子文件夹中的所有 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253595/

相关文章:

asp.net - 启动 ASP.NET 开发服务器,然后在浏览器中打开的 .BAT 文件

linux - 制作 : nothing can be done for all

ios - JUCE 中的视频播放器 (C++) - 在 Windows 上构建并在 iOS 上运行

command-line - 从环境变量中去除回车符 - XP 命令行

c# - 使用 C# 以编程方式输入 cmd.exe 应用程序参数

windows - 在 Windows 2002 中,“timeout”不被识别为内部或外部命令、可操作程序或批处理文件

windows - 使用 cmd Windows 7 将键盘命令发送到程序中

windows - 为什么 Powershell 会在 $PATH 中的每个目录中搜索 PSConsoleHostReadLine 文件?

windows - 将文件拖放到 Visual Studio 中不起作用

batch-file - 调试从 Inno Setup 安装程序执行的非工作批处理文件或命令