batch-file - 如何在 Windows 批处理文件中使用 7zip 从 ZIP 存档中提取最后一个目录?

标签 batch-file 7zip

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

假设存档看起来像这样

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 总是告诉我:没有要处理的文件。

最佳答案

您必须添加 -r 解压缩选项并将反引号添加到 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/?

关于batch-file - 如何在 Windows 批处理文件中使用 7zip 从 ZIP 存档中提取最后一个目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17168145/

相关文章:

c# - 如何在 Azure Blob 存储中解压自解压 Zip 文件?

windows - 网络延迟监控脚本窗口

windows - 从 Windows 命令中删除 stderr

powershell - 将 %* 从批处理脚本作为 $args 传递给 powershell 脚本时转义参数

c# - 蛮力 7z 密码测试

python - 如何使用 python 以编程方式计算存档中的文件数

android - 无法从 Android 上创建的 ZIP 存档中提取文件(特定于设备/操作系统)

batch-file - 7zip 使用批处理文件创建空文件

windows - 如何编写 BAT 文件以始终以管理员模式运行?

mysql - 强制hibernate在MySQL中以单次插入的方式插入批处理数据