¿Cómo recomprimir muchos zips en un disco?

¿Cómo recomprimir muchos zips en un disco?

Tengo un disco duro que contiene muchos archivos ZIP de copias de seguridad de varias cosas. Se comprimieron en diferentes momentos de formas diferentes e inconsistentes, y muchos de ellos utilizan configuraciones de compresión mínimas.

¿Hay alguna manera (preferiblemente con 7zip) de recomprimir todos los ZIP en una unidad usando la misma (mejor) configuración de compresión?

Respuesta1

A continuación se muestra un script que he usado en el pasado para una tarea similar con 100% de éxito y que es puro lote con7Zipdonde puede especificar explícitamente el directorio de origen donde puede ser una letra de unidad o una carpeta.

Esto también le permite especificar explícitamente un directorio temporal raíz inicial y luego crear una nueva carpeta dentro de él que coincida con el nombre del archivo zip menos la extensión zip, y luego lo elimina una vez que7ZipLas operaciones de archivo están completas para cada archivo zip.Para /Fel bucle itera y procesa.

Guion

Simplemente establezca los valores de las variables Src=, ExtractDir=y z7=para que sean los que necesiten en su entorno en la parte superior del script y el resto simplemente funcionará.

Puedes especificar lo que seaMétodos de compresión 7Zipque necesita al final del %z7% a ~comando justo después del -aoacambio según -aoa -m<method_parameters>sus necesidades.

Sin embargo, para ejecutarlo como un script por lotes, guarde la lógica en unDocumento de textoen su escritorio, etc. a <something>.cmdpartir del documento de textoarchivo | ahorraropciones. Una vez guardado, simplemente haga doble clic para ejecutar la lógica (o haga clic derecho en ejecutar como administrador) y luego confirme que los archivos se hayan manipulado como se esperaba.

@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

Tenga en cuenta que ECHO A |delante del %z7% e ~comando le indica que sobrescriba cualquier archivo existente que exista en el directorio de salida en lugar de esperar a que usted le indique que lo haga, etc.

ingrese la descripción de la imagen aquí

Además, tenga en cuenta el uso del -aoainterruptor al final del %z7% a ~comando que le indica que sobrescriba todos los archivos existentes dentro del archivo zip que está comprimiendo para reemplazar todos los archivos originales que contiene sin eliminar de antemano todo el archivo zip original, lo cual es muy simple. para agregar a este script si es necesario una línea adicional de IF EXIST "%%~Fa" DEL /Q /F "%%~Fa".


Recursos adicionales

Respuesta2

Aquí hay una secuencia de comandos simple para el símbolo del sistema normal ( cmd.exe) que puede hacer esto por usted:

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
)

Primero, ZIP7la variable se define con la ruta a 7z.exe. Entoncesforitera sobre todos los archivos zip en el directorio actual. Cada archivo zip se extrae en tmpel directorio y luego se recomprime con 7-Zip usando la compresión máxima ( -mx9opción).

Puede poner estos comandos en un archivo por lotes. En este caso, utilice double %en la forvariable -loop. Es decir, utilizar %%zen lugar de %z.

Respuesta3

El software gratuito ReZip hará el trabajo:zipada55-bin-win32.zip. Para empezar, el rezip -comp -int archive.zipcomando hará un buen trabajo sin necesidad de instalación adicional. Para una compresión aún mejor, necesitarás descargar zip, 7z, kzip, advzip y ejecutar ReZip sin la -intopción. El conjunto completo de opciones de línea de comando son:

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

Respuesta4

Escriba un script de PowerShell que encuentre todos los archivos zip en su disco duro, para cada archivo zip encontrado, extraiga todos los archivos y comprímalos nuevamente en el formato deseado.

Puede utilizar funciones ZIP integradas o llamar a las herramientas de línea de comandos de 7zip desde PowerShell.

información relacionada