Extraia os arquivos zip com o nome mais recente em cada subpasta

1

Situação: Eu tenho a seguinte árvore de pastas:

  • Raiz \

    • doc1 \

      • doc1-r000.zip
      • doc1-r010.zip
      • ...
      • doc1-r051.zip
    • doc3 \
      • doc3-r000.zip
      • doc3-r001.zip
      • ...
      • doc3-r012.zip
    • ...
    • docN \

      • ...
      • docN-rM.zip

em que cada subpasta contém várias revisões de um documento em arquivos zip separados. Os nomes das pastas e os números de revisão são descontínuos. Quase todos os documentos têm diferentes números de revisões. Eles são clonados de um servidor FTP remoto, portanto, todos têm o mesmo registro de data e hora e as informações de data desaparecem.

Meta: O objetivo final é extrair apenas a revisão mais recente de cada documento para a raiz.

Ferramentas: As ferramentas prontamente disponíveis são o Windows 7, o PowerShell 2 e o 7-Zip. É possível instalar ferramentas ou atualizações adicionais.

    
por nonKreon 23.02.2018 / 04:21

1 resposta

1

No PowerShell com 7-Zip:

$root = "C:\adjust\path"

Get-ChildItem $root -Directory -Recurse -Include 'doc*' | ForEach-Object -Process {

    $n = 0
    $dir_name = ($_.FullName) + '\' + ($_.BaseName)

    while (Test-Path "$dir_name-r000.zip") {

        $num = "{0:d3}" -f $n
        $test = "$dir_name-r$num.zip"

        if (Test-Path $test) {

            $file_name = $test
            $n++

        } else {

            ."C:\Program Files-ZipzG.exe" e "$file_name" -o"$root\$_.BaseName"

            break

        }
    }
}

"Done!'n"
Pause

Isso extrairá o arquivo com o maior número de cada pasta que contém doc para uma nova subpasta em $root . Se você não precisa das subpastas, simplesmente remova \$_.BaseName da opção -o .

    
por 24.02.2018 / 02:21