Lote descompactar todos os arquivos zip em sub-diretórios; conteúdo de cada arquivo extraído para o novo diretório nomeado após o arquivo

3

Eu tenho uma pasta com várias subpastas, dentro dessas subpastas há arquivos zipados.

Eu queria saber como descompactar esses arquivos em uma pasta com o nome do arquivo zip Então, por exemplo:

C:\Archives\Photos\A.zip
C:\Archives\Videos\B.zip
C:\Archives\Documents\C.zip

se transformaria em

C:\Archives\Photos\A\
C:\Archives\Videos\B\
C:\Archives\Documents\C\

Eu posso fazer isso atualmente, mas somente se eu fizer uma pasta de cada vez, eu queria saber se havia uma maneira de fazer tudo de uma vez, eu estava pensando em um arquivo .bat.

    
por Chris Jackson 24.08.2017 / 19:18

2 respostas

2

@Echo off
For %%F in (Photos,Videos,Documents) Do (
    For /F "delims=" %%Z in ('Dir /B/S/A-D "C:\Archives\%%F\*.zip" 2^>Nul') Do (
        7z x "%%~fZ" -o"%%~dpnZ\" && Rem Del "%%~fZ"
    )
)

Se você quiser descartar o arquivo zip depois de descompactado com sucesso, remova o Rem na frente do del.

O lote usa modificadores de variável para usar somente partes do nome completo do arquivo

    
por 24.08.2017 / 20:06
1

Um one-liner do PowerShell para conseguir isso:

Get-ChildItem -Filter *.zip -Recurse C:\Archives | % { $_.FullName } | Split-Path | Get-Unique | % { cd $_ ; &'C:\Program Files-Zipz.exe' x *.zip -o* }

Aqui está uma explicação de cada seção, que é canalizada para a próxima seção e assim executada por Powershell em ordem:

  • Get-ChildItem -Filter * .zip -Recurse C: \ Archives : localiza todos os arquivos zip em C: \ Archives
  • % {$ _. FullName} : para o objeto resultante, mostre o caminho completo & nome
  • Split-Path : mostra apenas o caminho (não o nome do arquivo) de cada zip
  • Get-Unique : remova duplicados da lista
  • % {cd $ _; & 'C: \ Arquivos de programas \ 7-Zip \ 7z.exe' x * .zip -o *} : finalmente, use a lista criada para alterar em cada diretório encontrado; use 7z.exe para descompactar todos os arquivos zip encontrados em cada diretório, com o argumento -o * para descompactar o conteúdo de cada arquivo zip em um diretório com o nome desse arquivo zip

Suposições:

  • C: \ Archives é o diretório sob o qual todos os seus arquivos zip são armazenados
  • Seu 7-Zip está instalado no local padrão

Enquanto pesquisava essa questão, cheguei à conclusão de que prefiro bater no PowerShell: -)

    
por 24.08.2017 / 20:52