3

我有一个具有深层目录结构的 ZIP 存档。我只想解压最后一个目录(“Package”)。我想要它的所有子目录和内容。我不知道里面会有什么,但我想要这一切。

假设存档看起来像这样

package.zip
  folder1\
    folder2\
      folder3\
        Package\
          PackageTmp\

我开始在 Windows 批处理文件中使用 7zip CLI 编写此脚本。

@ECHO OFF
FOR /F "usebackq tokens=*" %%i in (DIR *.zip /B /A:-D) DO CALL :EXTRACT %%i
GOTO :EOF

:EXTRACT
IF "%1"=="" GOTO :EOF
SET zipfile=%1
SET folder=%zipfile:~0,-4%
7za.exe x %zipfile% -o%folder% -y PackageTmp*
GOTO :EOF

7zip 总是告诉我:没有要处理的文件。

4

1 回答 1

1

您必须添加 -r unzip 选项并将反引号添加到 for 循环中,见下文。

FOR /F "usebackq tokens=*" %%i in (`DIR *.zip /B /A:-D`) DO CALL :EXTRACT %%i
GOTO :EOF

:EXTRACT
IF "%1"=="" GOTO :EOF
SET zipfile=%1
SET folder=%zipfile:~0,-4%
7za.exe x %zipfile% -o%folder% -y -r PackageTmp*
GOTO :EOF

反引号用于在它们之间执行命令。usebackq只有在添加for 循环的选项时才能使用它们。

执行命令并遍历结果也可以通过以下(更老式和有限的)方式使用单引号来完成。

FOR /F "tokens=*" %%i in ('DIR *.zip /B /A:-D') DO CALL :EXTRACT %%i

有关详细信息,请参阅 dos 命令for /?

于 2013-06-19T09:16:33.260 回答