使用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/