Como recomprimir muitos zips em uma unidade?

6

Eu tenho um disco rígido que contém muitos arquivos ZIP de backups de várias coisas. Eles foram compactados em diferentes pontos no tempo de maneiras diferentes e inconsistentes, e muitos deles usam configurações mínimas de compactação.

Existe uma maneira (preferencialmente com 7zip) de recomprimir todos os ZIPs em uma unidade usando as mesmas (melhores) configurações de compactação?

    
por Julian Lachniet 04.03.2018 / 16:56

3 respostas

5

Abaixo está um script que usei no passado para uma tarefa semelhante com 100% de sucesso, que é puro lote com 7Zip onde você pode especificar explicitamente o diretório de origem, onde pode ser uma letra de unidade ou pasta.

Isso também permite especificar explicitamente um diretório temporário raiz inicial e, em seguida, criar uma nova pasta dentro dele correspondente ao nome do arquivo zip menos a extensão zip e, em seguida, removê-lo uma vez 7Zip estão completas para cada arquivo zip Para / F loop itera e processa.

Script

Você acabou de definir os valores das variáveis Src= , ExtractDir= e z7= como sendo o que eles precisam para estar em seu ambiente na parte superior do script e o restante apenas funcionará. / em>

Você pode especificar os métodos de compactação 7Zip necessários no final do O comando %z7% a ~ logo após o -aoa muda como -aoa -m<method_parameters> para as suas necessidades.

Para rodar como um script em lote, salve a lógica em um documento de texto na sua área de trabalho, etc. como <something>.cmd do arquivo de texto arquivo | salvar opções. Uma vez salvo, basta clicar duas vezes nele para executar a lógica (ou clicar com o botão direito do mouse como administrador) e confirmar que os arquivos foram manipulados como esperado posteriormente.

@ECHO ON
SET Src=X:\
SET ExtractDir=%Src%\tmpExtract007
SET z7="C:\Program Files-Zipz.exe"

FOR /F "usebackq tokens=*" %%a IN ('DIR /S /B /A-D "%Src%\*.zip"') DO (
    IF NOT EXIST "%ExtractDir%\%%~Na" MD "%ExtractDir%\%%~Na"
    ECHO A | %z7% e "%%~Fa" -o"%ExtractDir%\%%~Na" -r
    %z7% a "%%~Fa" "%ExtractDir%\%%~Na\*" -aoa
    RD /Q /S "%ExtractDir%\%%~Na"
)
PAUSE
EXIT

Por favor, note o ECHO A | na frente do comando %z7% e ~ para dizer a ele para sobrescrever quaisquer arquivos existentes que existam no diretório out ao invés de esperar que você o informe, etc.

Alémdisso,observeousodaopção-aoanofinaldocomando%z7%a~,quedizparasobrescrevertodososarquivosexistentesnoarquivozipquevocêestácompactandoparasubstituirtodososarquivosoriginaisdentrodelesemrealmenteexcluiroarquivo.todooarquivoziporiginaldeantemãoqueémuitosimplesdeadicionaraestescript,senecessário,porumalinhaadicionaldeIFEXIST"%%~Fa" DEL /Q /F "%%~Fa" .

Mais recursos

por 11.03.2018 / 18:49
4

Aqui está um script simples para o Prompt de Comando regular ( cmd.exe ) que pode fazer isso para você:

set ZIP7="C:\Program Files-Zipz.exe"

for %z in (*.zip) do (
    mkdir tmp
    cd tmp
    %ZIP7% x ..\%z
    %ZIP7% a ..\%z.7z -r -mx9 *
    cd ..
    rmdir /s /q tmp
)

Primeiro, a variável ZIP7 é definida com o caminho para 7z.exe . Em seguida, for itera todos os arquivos zip no diretório atual. Cada arquivo zip é extraído no diretório tmp e recompactado com o 7-Zip usando a compactação máxima ( -mx9 option).

Você pode colocar esses comandos em um arquivo em lotes. Nesse caso, use double % na variável for -loop. Ou seja, use %%z em vez de %z .

    
por 11.03.2018 / 16:51
0

Escreva um script do PowerShell que encontre todos os arquivos zip no disco rígido, para cada arquivo zip encontrado, extraia todos os arquivos e os compacte novamente no formato desejado.

Você pode usar funções ZIP integradas ou chamar ferramentas de linha de comando 7zip do PowerShell.

    
por 04.03.2018 / 18:09