
Eu tenho um arquivo zip results.zip
. Ele contém duas pastas que contêm vários arquivos zip - PASS/test1.zip
, FAIL/test2.zip
, FAIL/test3.zip
.
No Linux é trivial descompactá-los em algumas etapas:
$ unzip results.zip
$ echo FAIL/*.zip PASS/*.zip | xargs -n1 unzip
Alguns usuários do Windows reclamam que é complicado descompactar todos os arquivos do Windows. (Existem dezenas de zips dentro do zip principal.) Existe um mecanismo que permitiria expandir o conteúdo de todos os arquivos de uma só vez?
Algumas caixas de clientes são mais recentes, mas há muitas que ainda usam WinXP.
Responder1
Dê a elesdescompacte.exee um script em lote como
unzip results.zip
for %%i in (FAIL\*.zip PASS\*.zip) do unzip %%i
Responder2
TentarExtrair agora. Eu não testei esse recurso sozinho, mas funcionareivindicar apoiá-lo.
Responder3
Aqui está uma solução para Windows, assumindo que o 7zip está instalado no local padrão.
@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"
)
Isso foi adaptado daquihttps://social.technet.microsoft.com/Forums/ie/en-US/ccd7172b-85e3-4b4a-ad93-5902e0abd903/batch-file-extracting-all-files-from-nested-archives?forum=ITCG
Notas:
- A única maneira de fazer modificação de variáveis usando os modificadores ~ é usar um loop for..in fictício. Se houver uma maneira melhor, edite.
- ~nx modifica a variável para torná-la um caminho completo + nome de arquivo.
- ~dpnx também faz a mesma coisa com% 0, ou seja, obtém o caminho completo e o nome do arquivo do script.
- -o* na linha de comando 7zip permite que o 7zip crie nomes de pastas sem a extensão .zip, como faz ao extrair com um clique com o botão direito na interface do usuário.
- ~n modifica a variável para torná-la um nome de arquivo sem extensão. ou seja, descarta o .zip
- Observe que o caractere de escape (para aspas)
FORFILES /P
é^
(circunflexo) enquanto paraCMD /C
it é\
. Isso garante que ele lide com caminhos e nomes de arquivos com espaços também de forma recursiva, sem nenhum problema. - Você pode remover o REM da instrução DEL se desejar que o arquivo zip seja excluído após a descompactação.
Responder4
Veja isso
http://www.softpedia.com/get/Compression-tools/Multi-Unpacker.shtml
"Manipulação de arquivos aninhados (extrair recursivamente arquivos que foram compactados em outros arquivos)."
SO: Windows 2K/XP/2003/Vista