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 -aoa
troca, -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>.cmd
partir 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.
Além disso, observe o uso da -aoa
opçã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, ZIP7
a variável é definida com o caminho para 7z.exe
. Entãofor
itera sobre todos os arquivos zip no diretório atual. Cada arquivo zip é extraído no tmp
diretório e então recompactado com 7-Zip usando compactação máxima ( -mx9
opção).
Você pode colocar esses comandos em um arquivo em lote. Neste caso, use double %
na for
variável -loop. Ou seja, use %%z
em vez de %z
.
Responder3
O freeware ReZip fará o trabalho:zipada55-bin-win32.zip. Para começar, o rezip -comp -int archive.zip
comando 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 -int
opçã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.