Como recomprimir muitos zips em uma unidade?

Como recomprimir muitos zips em uma unidade?

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

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

Responder1

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

Isso também permite que você especifique explicitamente um diretório temporário raiz inicial e, em seguida, crie uma nova pasta dentro dele que corresponda ao nome do arquivo zip menos a extensão zip e, em seguida, remova-o assim que o7Zipas operações de arquivamento são concluídas para cada arquivo zip quePara /Floop itera e processa.

Roteiro

Você apenas define os valores das variáveis Src=​​, ExtractDir=e z7=como o que for necessário em seu ambiente na parte superior do script e o resto simplesmente funcionará.

Você pode especificar qualquer coisaMétodos de compactação 7Zipvocê precisa no final do %z7% a ~comando logo após a -aoatroca, -aoa -m<method_parameters>conforme suas necessidades.

Para executar como um script em lote, salve a lógica em umdocumento de textona sua área de trabalho, etc. a <something>.cmdpartir do documento de textoarquivo | salvaropções. Depois de salvo, basta clicar duas vezes nele para executar a lógica (ou clicar com o botão direito em executar como administrador) e confirmar que os arquivos foram manipulados conforme o esperado posteriormente.

@ECHO ON
SET Src=X:\
SET ExtractDir=%Src%\tmpExtract007
SET z7="C:\Program Files\7-Zip\7z.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

Observe o que ECHO A |está na frente do %z7% e ~comando para solicitar que ele substitua quaisquer arquivos existentes no diretório out, em vez de esperar que você peça para fazê-lo, etc.

insira a descrição da imagem aqui

Além disso, observe o uso da -aoaopção no final do %z7% a ~comando, que informa para substituir todos os arquivos existentes no arquivo zip que você está compactando para substituir todos os arquivos originais dentro dele, sem realmente excluir todo o arquivo zip original de antemão, o que é muito simples para adicionar a este script, se necessário, uma linha adicional de IF EXIST "%%~Fa" DEL /Q /F "%%~Fa".


Recursos adicionais

Responder2

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

set ZIP7="C:\Program Files\7-Zip\7z.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, ZIP7a variável é definida com o caminho para 7z.exe. Entãoforitera sobre todos os arquivos zip no diretório atual. Cada arquivo zip é extraído no tmpdiretório e então recompactado com 7-Zip usando compactação máxima ( -mx9opção).

Você pode colocar esses comandos em um arquivo em lote. Neste caso, use double %na forvariável -loop. Ou seja, use %%zem vez de %z.

Responder3

O freeware ReZip fará o trabalho:zipada55-bin-win32.zip. Para começar, o rezip -comp -int archive.zipcomando fará um bom trabalho sem instalação adicional. Para uma compactação ainda melhor, você precisará baixar zip, 7z, kzip, advzip e executar o ReZip sem a -intopção. O conjunto completo de opções de linha de comando é:

Options:  -defl     : repack archive only with the Deflate
                        subformat (most compatible)
          -fast_dec : repack archive only with fast decompressing subformats
          -int      : use internal Zip-Ada algorithms only, no external call
          -touch    : set time stamps to now
          -lower    : set full file names to lower case
          -del_comm : delete comment
          -comp     : compare original and repacked archives (paranoid mode)
          -rs=n     : loop many times over a single compression approach
                        having randomization, and keep optimum when size is
                        stable after n attempts in a row

Responder4

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

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

informação relacionada