批处理如何使用7zip将多个zip文件提取到其原始文件夹中?

时间:2018-07-05 15:31:01

标签: batch-file zip 7zip

我在不同的文件夹中有多个zip文件,并希望将其解压缩到它们所在的文件夹中。

Parent Folder
    -Folderwithzip1
        --zip1
        --[Content from zip1 should land here]
    -Folderwithzip2
        --zip2
        --[Content from zip2 should land here]

我尝试过

for /r "C:\zip" %f in (*.zip) do do 7z x -o "%~dpf" "%f"

我也尝试过

FOR /F "USEBACKQ tokens=*" %%F IN (`DIR /b *.zip`) DO ("C:\Program Files\7-Zip\7z.exe" e "%%F" -y)

但这只会提取批处理文件所在文件夹中的文件。

但是批处理甚至没有开始。

1 个答案:

答案 0 :(得分:0)

命令行中两次包含关键字do,这是第一个错误。

第二个错误是-o"%~dpf"之间的空格字符。

7-Zip 的帮助是 7-Zip 的程序文件文件夹中的文件7zip.chm,可以从 7内部打开-Zip ,或双击该文件。在选项卡内容中,列表项 Command Line Version 中带有子列表项 Switches ,其中包含指向 -o(设置输出目录)的链接)切换。帮助页面上解释的语法以及示例在开关-o和目录路径之间没有空格。

7-Zip 还会在执行时输出适当的错误消息,并在-o和输出目录路径之间加一个空格:

  

命令行错误:
  开关太短:
  -o

因此,该解决方案对于命令行用法非常简单:

for /R "C:\zip" %I in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x -o"%~dpI" -y -- "%I"

在批处理文件中使用时,每个百分号都转义了一个百分号:

for /R "C:\zip" %%I in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" -y -- "%%I"

我建议也运行在命令提示符窗口for /?中,并阅读命令 FOR 的帮助输出。

此处不需要

DIR ,除非还有* .zip文件具有隐藏的属性集,这些文件始终被 FOR 忽略,或者某些ZIP文件包含*。批处理文件时,应避免使用zip文件并提取那些* .zip文件。在命令提示符窗口dir /?中运行,以获取有关命令 DIR 的帮助。

可以在批处理文件中使用以下命令行,以在由 FOR 使用cmd /C启动的单独命令过程中首先运行命令 DIR ,捕获 DIR 编写的所有内容以处理 STDOUT ,然后逐行处理所有捕获的行(=完整的合格文件名):

for /F "delims=" %%I in ('dir "C:\zip\*.zip" /A-D /B /S 2^>nul') do "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" -y -- "%%I"
在这里需要

DIR 选项/S,以便让 DIR 还在C:\zip的所有子目录中搜索* .zip文件并输出找到的具有完整路径的* .zip文件的名称,而不仅仅是文件名。