Как повторно сжать много молний на диске?

У меня есть жесткий диск, который содержит много 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.

Другие вопросы по тегам