
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 -aoa
cambio 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>.cmd
partir 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.
Además, tenga en cuenta el uso del -aoa
interruptor 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, ZIP7
la variable se define con la ruta a 7z.exe
. Entoncesfor
itera sobre todos los archivos zip en el directorio actual. Cada archivo zip se extrae en tmp
el directorio y luego se recomprime con 7-Zip usando la compresión máxima ( -mx9
opción).
Puede poner estos comandos en un archivo por lotes. En este caso, utilice double %
en la for
variable -loop. Es decir, utilizar %%z
en lugar de %z
.
Respuesta3
El software gratuito ReZip hará el trabajo:zipada55-bin-win32.zip. Para empezar, el rezip -comp -int archive.zip
comando 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 -int
opció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.