- MAKECAB — создание CAB-архивов из командной строки Windows
- Синтаксис команды MAKECAB
- Ключи и параметры
- Примеры использования
- Упаковать один файл
- Упаковать с максимальным сжатием LZX
- Сохранить результат в другой каталог
- Упаковать несколько файлов через DDF
- Проверить процесс упаковки с подробным выводом
- Упаковать файл без сжатия
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- Можно ли распаковать CAB командой MAKECAB?
- Чем отличается MSZIP от LZX в MAKECAB?
- Какой максимальный размер CAB-файла?
- Как добавить файлы в существующий CAB?
- Нужны ли права администратора для MAKECAB?
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 и подобных).


