Processa recursivamente arquivos zip para extrair arquivos enquanto descarta formato específico de arquivos

0

UPDATE: Eu percebi que muitas pessoas estão vendo este tópico, o que me faz acreditar que esta situação não é tão rara afinal. De qualquer forma, eu tinha feito uma pergunta semelhante / relacionada sobre SO aqui , que também tem soluções bastante decentes que podem resolver o problema uma maneira melhor.

Na minha máquina com Windows 7, tenho um diretório cheio de arquivos descarregados em arquivos ZIP. Cada arquivo contém alguns arquivos de texto, PDFs e raramente arquivos XML. Eu quero extrair todo o conteúdo de cada arquivo ZIP em sua respectiva pasta (deve ser criado durante o processo) ao descartar / ignorando a extração de PDFs. Após a extração dos arquivos necessários de um arquivo, o zip processado não deve ser excluído (ou eu gostaria de saber como posso controlá-lo em situações diferentes).

Se isso ajudar a saber, o número de arquivos no diretório está no intervalo de 60k-70k. Além disso, eu preciso de diretórios de saída separados porque os arquivos em um arquivo podem ter os mesmos nomes que os arquivos em outros.

Por exemplo,

  • Eu tenho todos os meus arquivos como one.zip , two.zip , .. em, digamos, D:\data
  • Eu crio uma nova pasta para dados processados, digamos, D:\extracted
  • Agora, os dados de D:\data\one.zip devem ir para D:\extracted\one . Aqui, D:\extracted\one deve ser criado automaticamente.
  • Durante este processo de descompactação completo, todos os PDFs encontrados não devem ser extraídos (ser ignorado). Não faz sentido extrair e excluir.
  • (Opcional) Um arquivo de log deve ser mantido em, digamos, D:\extracted . A ideia é usar esse arquivo para retomar o processamento de onde ele foi deixado em caso de erro.
  • (Opcional) O script deve permitir que eu decida se quero manter os arquivos de origem ou excluí-los após o processamento.

Eu já fiz alguma pesquisa para encontrar uma solução, mas não consegui encontrar uma. Eu me deparei com algumas perguntas como estas

  1. Recursivamente descompacte os arquivos onde eles residem e exclua os arquivos
  2. 7 extrato zip recursivamente
  3. É É possível listar recursivamente o conteúdo do arquivo zip com 7 zip sem extrair

mas eles não foram de muita ajuda (eu não sou um profissional com o Windows por sinal). Estou aberto a instalar softwares de terceiros (open-source) seguros e sem anúncios como o 7-zip.

EDITAR: Existe uma ferramenta prontamente disponível para fazer o que eu preciso, eu já tentei Multi Unpacker . Não cria novos diretórios, não pode ignorar arquivos * .pdf. É até lento para começar, acho que primeiro leio todos os arquivos na fonte antes de começar a processá-los.

Obrigado antecipadamente!

    
por Fr0zenFyr 18.06.2014 / 08:41

1 resposta

1

Modificando a resposta encontrada aqui , este pedaço de script do PowerShell deve fazer o que você deseja. Basta salvá-lo como um arquivo com a extensão ".ps1". Ao chamá-lo, basta chamá-lo como ./filename.ps1 e ele irá extrair os arquivos para separar pastas, excluir os arquivos zip e remover todos os arquivos com a extensão .pdf. Eu não testei se funciona corretamente com caminhos recursivos, mas deveria, por favor, testar.

Editar: Se você não quiser que seus arquivos zip sejam excluídos, remova ou comente (#) a linha rmdir -Path $_.FullName -Force

Requisitos: PowerShell, 7-zip e para você definir o caminho do 7-zip no arquivo.

param([string]$folderPath="D:\Blah\files")

Get-ChildItem $folderPath -recurse | %{ 

    if($_.Name -match "^*.'.zip$")
    {
        $parent="$(Split-Path $_.FullName -Parent)";    
        write-host "Extracting $($_.FullName) to $parent"

        $arguments=@("e", "'"$($_.FullName)'"", "-o'"$($parent)\$($_.BaseName)'"");
        $ex = start-process -FilePath "'"C:\Program Files-Zipz.exe'"" -ArgumentList $arguments -wait -PassThru;

        if( $ex.ExitCode -eq 0)
        {
            write-host "Extraction successful, deleting $($_.FullName)"
            rmdir -Path $_.FullName -Force
            $arguments1="$($parent)\$($_.BaseName)\*.pdf"
            rmdir -Recurse -Path $arguments1
        }
    }
}
    
por 18.06.2014 / 09:39