我有一个带有深层目录结构的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总是告诉我:没有要处理的文件。
答案 0 :(得分: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
反引号用于在它们之间执行命令。如果在for循环的选项中添加usebackq
,则只能使用它们。
执行命令并循环结果也可以使用单引号以下(更老式和有限)的方式完成。
FOR /F "tokens=*" %%i in ('DIR *.zip /B /A:-D') DO CALL :EXTRACT %%i
有关详细信息,请参阅dos命令for /?
。