Как повторно сжать много молний на диске?
У меня есть жесткий диск, который содержит много ZIP-файлов резервных копий различных вещей. Они были сжаты в разные моменты времени разными и противоречивыми способами, и многие из них используют минимальные настройки сжатия.
Есть ли способ (желательно с 7zip) повторно сжать все ZIP на диске, используя те же (лучшие) параметры сжатия?
4 ответа
Ниже приведен сценарий, который я использовал в прошлом для аналогичной задачи со 100% -ным успехом, это чистый пакет с 7Zip, где вы можете явно указать исходный каталог, где он может быть буквой диска или папкой.
Это также позволяет вам явно указать начальный корневой временный каталог, а затем создать в нем новую папку, соответствующую имени zip-файла минус расширение zip, а затем удалить его после завершения операций архивирования 7Zip для каждого zip-файла, для которого /F цикл повторяется и обрабатывается.
скрипт
Вы просто устанавливаете значения Src=
, ExtractDir=
, а также z7=
переменная, которая должна быть в вашей среде в верхней части скрипта, а все остальное будет работать.
Вы можете указать любые методы сжатия 7Zip, которые вам нужны, в конце %z7% a ~
Команда сразу после -aoa
переключаться как -aoa -m<method_parameters>
для ваших нужд.
Чтобы запустить как пакетный скрипт, сохраните логику в текстовом документе на рабочем столе и т. Д. Как <something>.cmd
из файла текстового документа | сохранить параметры. После сохранения просто дважды щелкните по нему, чтобы выполнить логику (или щелкните правой кнопкой мыши запуск от имени администратора) и подтвердите, что файлы были обработаны, как и ожидалось, впоследствии.
@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
Пожалуйста, обратите внимание ECHO A |
напротив %z7% e ~
команда, чтобы сказать ему перезаписать любые существующие файлы, которые существуют в каталоге out, вместо того, чтобы ждать, пока вы попросите это сделать, и т. д.
Также обратите внимание на использование -aoa
переключатель в конце %z7% a ~
команда, которая говорит ему перезаписать все существующие файлы внутри zip-файла, который вы заархивируете, чтобы заменить все исходные файлы внутри него, фактически не удаляя весь оригинальный zip-файл заранее, что очень просто добавить в этот скрипт, если нужно с помощью одной дополнительной строки IF EXIST "%%~Fa" DEL /Q /F "%%~Fa"
,
Дополнительные ресурсы
Вот простой скрипт для обычной командной строки (cmd.exe
) который может сделать это для вас:
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
)
Первый, ZIP7
переменная определяется с путем к 7z.exe
, затем for
перебирает все zip-файлы в текущем каталоге. Каждый zip-файл извлекается в tmp
каталог, а затем повторно сжать с 7-Zip, используя максимальное сжатие (-mx9
опция).
Вы можете поместить эти команды в командный файл. В этом случае используйте двойной %
в for
переменная То есть использовать %%z
вместо %z
,
Бесплатное программное обеспечение ReZip выполнит эту работу: zipada55-bin-win32.zip. Начнем с того, что rezip -comp -int archive.zip
Команда сделает честную работу без дальнейшей установки. Для еще лучшего сжатия вам нужно скачать zip, 7z, kzip, advzip и запустить ReZip без -int
вариант. Полный набор параметров командной строки:
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
Напишите сценарий PowerShell, который находит все zip-файлы на вашем жестком диске, для каждого найденного zip-архива извлекает все файлы и снова сжимает их в нужном формате.
Вы можете использовать встроенные функции ZIP или вызвать инструменты командной строки 7zip из PowerShell.