Como faço para extrair todos os arquivos ZIP em subpastas usando o 7-Zip no Windows 7

2

Eu tenho uma grande estrutura de árvore de pastas do Windows 7 que contém muitos arquivos ZIP . Estes são arquivos ZIP de camada única (não ZIP dentro de ZIP). Que comando 7-Zip posso usar para analisar essa estrutura de pastas, localizar cada arquivo ZIP por extensão de arquivo (veja o exemplo), extraí-lo (excluir o arquivo ZIP, deixando os arquivos extraídos) para o mesmo local?

Exemplo: Todos os arquivos na hierarquia de pastas são nomeados como: abc.mp3.zip ou xyz.jpg.zip - a extensão do arquivo nativo seguida por ".zip". Eu quero 7-Zip para encontrar todos os arquivos na árvore por extensão de arquivo usando curingas (* .mp3.zip, * .jpg.zip, etc) e extraí-los para o local atual sem criar novas pastas para que o resultado seja abc. mp3 e xyz.jpg.

    
por radian21 02.02.2011 / 16:52

1 resposta

2

Tanto quanto eu posso dizer, 7-zip não tem um comando que faz o que você está procurando. Aqui está um script de arquivo em lotes do Windows, que eu acho que vai fazer o que quiser. Ele deve ser executado a partir da linha de comando para que você possa fornecer um caminho para a raiz da árvore de pastas a ser processada.

Arquivo unzipper.bat

@echo off
setlocal
if "%1"=="" goto Usage

call :Get7zCmd
:: Recurse folder passed in as paramater
for /r %1 %%Z in (*.zip) do (
    echo ====
    rem Change to the directory of zip file
    cd /d "%%~dpZ"
    rem Extract all files to current directory
    echo %_7zCmd% e "%%~nxZ" -y
    rem Delete the zip file
    echo del "%%~nxZ"
)
goto End

:Usage
echo.
echo Parses through folder structure starting at the specified path, finding
echo and extracting the contents of all zip files found, and then deletes
echo the zip file.
echo.
echo Usage:
echo     %~n0 root-directory-path
echo.
echo     For example:
echo.
echo %~n0 "D:\some folder"

:End
goto :EOF

:: ==========================
:: Subroutine Get7zCmd
:: Determines the full path to 7-zip command-line executable from the Windows
:: Registry and sets the variable "_7zCmd" to the result.
:Get7zCmd
set Reg.Key=HKLM\Software\Microsoft\Windows\CurrentVersion\App PathszFM.exe
set Reg.Val=Path
for /F "Tokens=2*" %%A in ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| find /I "%Reg.Val%"') do call set PathDirectory=%%B
set _7zCmd="%PathDirectory%%z.exe"
exit /b 0

Como um todo o que o script faz é bastante radical e potencialmente destrutivo porque pode extrair um grande número de arquivos e excluir muitos arquivos zip posteriormente, eu desativei os comandos nas linhas 12 e 14 que fariam essas coisas prefixando -los com echo . Isso os faz apenas imprimir o que eles teriam feito se o echo não estivesse lá. Dessa forma, você pode testar o script primeiro sem causar nenhum dano ao seu sistema de arquivos, caso haja algum tipo de problema inesperado.

Para modificar o script, na verdade, execute estas ações, você precisará remover o echo em cada uma das duas linhas. A renúncia padrão de qualquer responsabilidade se aplica, é claro.

    
por 02.02.2011 / 20:58