![在 Windows 上解压包含在 zip 文件中的 zip 文件](https://linux22.com/image/1254758/%E5%9C%A8%20Windows%20%E4%B8%8A%E8%A7%A3%E5%8E%8B%E5%8C%85%E5%90%AB%E5%9C%A8%20zip%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20zip%20%E6%96%87%E4%BB%B6.png)
我有一个 zip 文件。它包含两个文件夹,results.zip
其中包含一堆 zip 文件-- PASS/test1.zip
、、FAIL/test2.zip
。FAIL/test3.zip
在 Linux 上,只需几个步骤即可轻松解压缩这些文件:
$ unzip results.zip
$ echo FAIL/*.zip PASS/*.zip | xargs -n1 unzip
一些 Windows 用户抱怨在 Windows 上解压所有文件很麻烦。(主 zip 里面有几十个 zip 文件。)是否有一种机制可以让他们一次性展开所有文件的内容?
一些客户的机器较新,但仍有许多在使用 WinXP。
答案1
给他们解压缩程序以及类似这样的批处理脚本
unzip results.zip
for %%i in (FAIL\*.zip PASS\*.zip) do unzip %%i
答案2
答案3
这是适用于 Windows 的解决方案,假设 7zip 安装在默认位置。
@echo off
Setlocal EnableDelayedExpansion
Set source=%1
Set SELF=%~dpnx0
For %%Z in (!source!) do (
set FILENAME=%%~nxZ
)
set FILENAME=%FILENAME:"=%
"%PROGRAMFILES%\7-zip\7z.exe" x -o* -y "%FILENAME%"
rem DEL "%FILENAME%"
For %%Z in (!source!) do (
set FILENAME=%%~nZ
)
for %%a in (zip rar jar z bz2 gz gzip tgz tar lha iso wim cab rpm deb) do (
forfiles /P ^"%FILENAME%^" /S /M *.%%a /C "cmd /c if @isdir==FALSE \"%SELF%\" @path"
)
笔记:
- 使用 ~ 修饰符进行变量修改的唯一方法是使用虚拟 for..in 循环。如果有更好的方法,请进行编辑。
- ~nx 修改变量,使其成为完整路径+文件名。
- ~dpnx 也对 %0 执行相同的操作,即获取脚本的完整路径和文件名。
- 7zip 命令行中的 -o* 允许 7zip 创建不带 .zip 扩展名的文件夹名称,就像在 gui 中右键单击提取时一样。
- ~n 修改变量,使其成为没有扩展名的文件名。即删除 .zip
- 请注意,中的转义字符(用于引号)
FORFILES /P
是^
(插入符号),而对于 则CMD /C
是\
。这确保它可以递归处理带有空格的路径和文件名而不会出现任何问题。 - 如果您希望在解压后删除 zip 文件,可以从 DEL 语句中删除 REM。
答案4
看到这个
http://www.softpedia.com/get/Compression-tools/Multi-Unpacker.shtml
“嵌套档案处理(递归提取打包在其他档案中的档案)。”
操作系统: Windows 2K / XP / 2003 / Vista