使用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文件和子文件夹有不同的名称。
答案 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
)