MAKECAB — создание CAB-архивов из командной строки Windows

MAKECAB создаёт сжатые CAB-файлы из командной строки Windows. Синтаксис, ключи /D и /F, примеры упаковки одного файла и группы файлов по DDF-списку.

MAKECAB — создание CAB-архивов из командной строки Windows

Команда MAKECAB создаёт сжатые архивы в формате CAB (Cabinet) — стандартном контейнере Windows для дистрибутивов ПО, обновлений и установочных пакетов. В отличие от сторонних архиваторов, MAKECAB встроена в систему, не требует установки и поддерживает директивные файлы DDF для упаковки сотен файлов одной командой.

Синтаксис команды MAKECAB

MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination]
MAKECAB [/V[n]] [/D var=value ...] /F directive_file ...

Плейсхолдеры:

  • source — путь к исходному файлу (один файл).
  • destination — имя создаваемого CAB-файла.
  • directive_file — путь к DDF-файлу со списком файлов и настройками сжатия.
  • dir — каталог для размещения выходных файлов (при использовании /L).

Ключи и параметры

Ключ Описание Пример
/V[n] Уровень детализации вывода (1–3). /V1 — минимум, /V3 — максимум MAKECAB /V2 file.txt out.cab
/D var=value Переопределить переменную директивного файла или задать параметр сжатия /D CompressionType=LZX
/L dir Каталог для выходных файлов (по умолчанию — текущий) /L C:\output
/F directive_file Использовать DDF-файл с инструкциями упаковки /F pack.ddf
CompressionType=MSZIP Алгоритм MSZIP (совместим с ZIP, умеренное сжатие) /D CompressionType=MSZIP
CompressionType=LZX Алгоритм LZX (лучшее сжатие, используется в MSI/MSU) /D CompressionType=LZX
CompressionLevel=Max Максимальный уровень сжатия (замедляет упаковку) /D CompressionLevel=Max
Cabinet=имя.cab Явно задать имя выходного CAB в DDF-файле .Set Cabinet=output.cab
DiskDirectoryTemplate Шаблон каталога для выходных файлов в DDF .Set DiskDirectoryTemplate=C:\dist

Примеры использования

Упаковать один файл

Самый простой вариант — сжать один файл и сохранить как CAB.

MAKECAB report.txt report.cab

В текущем каталоге будет создан report.cab с файлом report.txt внутри. Тип сжатия по умолчанию — MSZIP.

Упаковать с максимальным сжатием LZX

LZX обеспечивает лучшую степень сжатия, чем MSZIP — актуально для дистрибутивов ПО.

MAKECAB /D CompressionType=LZX /D CompressionLevel=Max setup.exe setup.cab

Файл setup.exe будет упакован с максимальным сжатием алгоритмом LZX.

Сохранить результат в другой каталог

Флаг /L перенаправляет выходной файл в указанный каталог, не меняя рабочий.

MAKECAB /L C:\dist document.docx document.cab

CAB-файл будет создан в C:\dist\document.cab, а не в текущем каталоге.

Упаковать несколько файлов через DDF

Для упаковки группы файлов удобнее использовать директивный файл DDF — текстовый список с настройками.

; pack.ddf
.OPTION EXPLICIT
.Set CabinetNameTemplate=archive.cab
.Set DiskDirectoryTemplate=C:\output
.Set CompressionType=LZX
.Set CompressionLevel=Max
C:\files\file1.txt
C:\files\file2.log
C:\files\config.ini
MAKECAB /F pack.ddf

Все три файла будут упакованы в C:\output\archive.cab с LZX-сжатием.

Проверить процесс упаковки с подробным выводом

При сборке дистрибутива полезно видеть, какие файлы добавляются и сколько места они занимают.

MAKECAB /V3 /F pack.ddf

Консоль выведет полный лог: имена файлов, исходный и сжатый размер каждого.

Упаковать файл без сжатия

Иногда нужен CAB-контейнер без сжатия — например, для совместимости с устаревшим ПО.

MAKECAB /D CompressionType=NONE installer.exe installer.cab

Файл помещается в CAB «как есть», размер архива равен исходному файлу.

Частые ошибки и решения

Ошибка Причина Решение
«Cabinet Wizard» зависает без вывода Путь к файлу содержит пробелы и не взят в кавычки Заключить пути в двойные кавычки: MAKECAB "C:\My Files\doc.txt" out.cab
«ERROR: Could not open file» Исходный файл не найден или нет прав на чтение Проверить путь и права; запустить CMD от администратора
«Variable not defined» в DDF Используется переменная без предварительного объявления Добавить в начало DDF строку .OPTION EXPLICIT и объявить все переменные через .Set
Пустой CAB-файл на выходе В DDF не указаны файлы или путь к ним неверен Проверить пути в DDF; использовать /V3 для отладки
CAB не открывается в Windows Explorer Файл повреждён из-за прерванной упаковки Повторить упаковку; проверить свободное место на диске назначения

Когда применять, а когда нет

MAKECAB незаменима при создании установочных пакетов (.msi, .msu), сборке дистрибутивов драйверов и упаковке файлов для Windows Installer. Команда работает на всех версиях Windows без установки дополнительного ПО. Не подходит для создания ZIP, RAR или 7z — для этого нужны соответствующие инструменты. При работе с большими наборами файлов (>1000) предпочтительнее DDF-файл вместо многократного вызова MAKECAB. PowerShell-аналог для простой архивации: Compress-Archive, однако он создаёт ZIP, а не CAB.

FAQ

Можно ли распаковать CAB командой MAKECAB?

Нет. MAKECAB только создаёт архивы. Для распаковки используйте команду EXPAND (встроена в Windows) или extrac32. Пример: EXPAND archive.cab -F:* C:\output.

Чем отличается MSZIP от LZX в MAKECAB?

MSZIP — быстрый алгоритм, совместимый с DEFLATE (ZIP). LZX — более медленный, но обеспечивает лучшее сжатие на 10–30%. LZX используется в MSI и обновлениях Windows. Для архивов, которые часто пересоздаются, лучше MSZIP; для финальных дистрибутивов — LZX.

Какой максимальный размер CAB-файла?

Технически ограничений нет, но отдельный CAB рекомендуется держать не более 2 ГБ для совместимости. При необходимости MAKECAB умеет создавать многотомные CAB (multi-cabinet) через параметры MaxCabinetSize в DDF-файле.

Как добавить файлы в существующий CAB?

MAKECAB не поддерживает добавление файлов в готовый архив — CAB пересоздаётся целиком. Для инкрементного обновления CAB используют утилиту CABARC из Windows SDK.

Нужны ли права администратора для MAKECAB?

Нет, если у вас есть права на чтение исходных файлов и запись в каталог назначения. Права администратора нужны только при упаковке файлов из системных каталогов (Windows\System32 и подобных).

Оцените статью
( Пока оценок нет )
MW10
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.