Eu tenho uma grande estrutura de árvore de pastas do Windows 7 contendo muitosfecho eclairarquivos. Estes são arquivos ZIP de camada única (não ZIP dentro de ZIP). Qual comando 7-Zip posso usar para analisar essa estrutura de pastas, encontrar cada arquivo ZIP por extensão de arquivo (veja o exemplo), extraí-lo (excluindo o arquivo ZIP, deixando os arquivos extraídos) para o mesmo local?
Exemplo: Todos os arquivos na hierarquia de pastas têm nomes como: abc.mp3.zip ou xyz.jpg.zip - a extensão de arquivo nativa seguida de ".zip". Quero que o 7-Zip encontre todos os arquivos na árvore por extensão de arquivo usando curingas (*.mp3.zip, *.jpg.zip, etc) e extraia-os para o local atual sem criar novas pastas para que o resultado seja abc. mp3 e xyz.jpg.
Responder1
Pelo que sei, o 7-zip não possui um comando que faça o que você procura. Aqui está um script de arquivo em lote do Windows que acho que fará o que você deseja. 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.
Arquivounzipper.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 Paths\7zFM.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%%\7z.exe"
exit /b 0
Como no geral 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, desabilitei os comandos nas linhas 12 e 14 que fariam essas coisas prefixando-os com echo
. Isso faz com que eles imprimam o que teriam feito se echo
não estivesse lá. Dessa forma, você pode testar o script primeiro sem causar nenhum dano ao sistema de arquivos, caso haja algum tipo de problema inesperado.
Para modificar o script e realmente executar essas ações, você precisará remover o echo
em cada uma das duas linhas. A isenção de responsabilidade padrão de qualquer responsabilidade se aplica, é claro.