Вопрос или проблема
Я хотел бы создать .cab файл из нескольких файлов. Любое руководство или учебник, с которыми я сталкивался, полезны только для нескольких файлов.
Согласно Википедии:
Формат CAB файла может использовать следующие алгоритмы сжатия:
- DEFLATE – изобретен Филом Кацем, автором формата ZIP-файлов
- Квантовое сжатие – лицензировано у Дэвида Стаффорда, автора Quantum archiver
- LZX – изобретено Джонатаном Форбсом и Томи Путаненом, передано Microsoft, когда Форбс присоединился к компании
Таким образом, любой .zip компрессор должен открыть файл, даже тот, который является встроенным во всех последних версиях Windows.
Тем не менее, как указывает статья, есть немного архиваторов, которые создают .cab файлы из-за их формата. Согласно этому списку, эти программы могут записывать .cab файлы:
- ZipGenius
- AlZip
- IZArc
- PowerArchiver
- TugZip
- WinAce
Вы можете использовать встроенную команду Windows makecab
, но сначала вам нужно создать список файлов.
dir C:\FolderName /s /b /a-d > c:\temp\files.txt
Это создаст список всех файлов в директории C:\FolderName и сохранит их в виде текстового файла с полным путем. Теперь мы собираемся использовать файл files.txt, чтобы создать cab файл.
makecab /d CabinetName1=test.cab /D DiskDirectoryTemplate=C:\temp /f c:\temp\files.txt
Вышеуказанная команда создаст файл test.cab в вашей папке C:\Temp, используя ранее созданный список файлов.
Дополнительная полезная ссылка: Справочник Microsoft Cabinet. и подробности makecab.exe.
“Один CAB файл может использоваться для хранения максимум 65,535 файлов с общим размером до 1.99 ГиБ. Чтобы сжать несколько файлов в один CAB файл, используйте директивный файл, содержащий список файлов для сжатия и упаковки.”
Директивный файл (list.txt):
.Set CabinetNameTemplate=Out.cab;
.Set Cabinet=on;
.Set Compress=off;
.Set DiskDirectoryTemplate=;
file1
file2
file3
.etc
Можно установить compress в on (чтобы сэкономить место), затем введите команду в cmd:
makecab /f list.txt
Для создания самораспаковывающегося архива:
copy /b "%windir%\system32\extrac32.exe"+"Out.cab" CABfiles.exe
Проверено на Win 10 CMD.
Вам нужно обновить или пересоздать CAB файл, возможно, заменить один файл в существующем CAB, сохраняя структуру папок в CAB? Это было то, что мне нужно было сделать. Краткий поиск не обнаружил простого способа с 7Zip или WinZip для обновления существующего CAB на месте. Я нашел успех через пересоздание нового CAB файла, такого же, как старый CAB файл, за исключением несколько измененных файлов в нем.
Инструмент, который это делает, представляет собой графический интерфейс для утилиты MakeCab. MakeCab, с правильной командной строкой, создаст CAB файл из всех файлов в папке.
Получите MakeCab здесь: https://github.com/sapientcoder/CabMaker
Процесс создания обновленного CAB файла:
- Откройте командную строку и используйте команду Expand, чтобы извлечь файлы из существующего CAB файла в структуру папок.
expand -F:* \MyServer\ServerMigration2020\ExportedConfigurationSourceFiles\MyOriginalCABFile.cab \MyServer\CaptureSV\ServerMigration2020\Cabfiles\CabSourceFiles
Эта команда Expand извлекает все файлы внутри вашего оригинального CAB файла и помещает их в папку CabSourceFiles, сохраняя структуру папок.
-
Внесите необходимые изменения в извлеченные файлы и папки. В моем случае был один файл, XML файл, который я заменил в структуре папок.
-
Запустите графический интерфейс CabMaker, чтобы создать ваш обновленный CAB файл. Обратите внимание, что это работает для “простого” CAB файла с файлами и папками, а не “инсталляционного” CAB файла с дополнительными заголовками и другими частями инсталлятора.
ОК, как получить и использовать инструмент CabMaker?
Получите его здесь: https://github.com/sapientcoder/CabMaker
Я просто скачал код CabMaker на C# с GitHub и запустил его в Visual Studio 2019 без изменений.
Графический интерфейс CabMaker сразу заработал. Я ввел свою папку источника (папку вывода в команде Expand), свою целевую папку (где будет размещен полученный CAB файл) и желаемое имя CAB файла, и нажал кнопку “Make CAB”, и он заработал. Полученный CAB файл сработал прекрасно и успешно импортировался в приложение, что привело к правильной конфигурации.
Так зачем же требовалось создать CAB файл? Ну, мы переносили приложение вендора с старого сервера на новый сервер, используя функцию “экспорт” приложения для захвата текущих файлов конфигурации, которые мы могли “импортировать” в приложение на новом сервере. Альтернативой было использование неуклюжего графического интерфейса приложения клиента для ручной навигации и внесения пары сотен изменений в имена файлов и папок, которые изменились. Я решил, что лучше будет внести изменения в файлы и папки в XML файле внутри CAB, содержащем все настройки. Все сошлось в день переноса сервера; иногда нам везет. Большие спасибо участнику GitHub SapientCoder!
Предполагая, что вы находитесь в папке с вашими файлами для сжатия, и что cabarc.exe будет найден в некотором Path окружении, тогда команда:
cabarc -m LZX:21 -p -r N ..\outfile.cab *.*
создаст файл outfile.cab на уровень выше.
Для создания Driver.cab:
C:
dir C:\FILES /s /b /a:- > c:\temp\files.txt
а теперь крупная команда:
makecab /d CompressionMemory=21 /d CompressionType=LZX /d MaxDiskSize=CDROM /d CabinetName1=driver.cab /D DiskDirectory=C:\temp /f C:\temp\files.txt
Ответ или решение
Создание файлов .cab является важной задачей для специалистов в области ИТ, особенно когда речь идет о сжатии и архивировании большого количества файлов для упрощения их распространения или интеграции в другие системы, такие как установщики или пакеты обновлений. Для реализации этого процесса в Windows присутствует несколько инструментов и методов, включая как штатные средства Windows, так и сторонние программы, каждый из которых имеет свои преимущества в зависимости от конкретных требований.
Теория
Файлы .cab (Cabinet) представляют собой сжатый архивный формат, который поддерживает разнообразие алгоритмов сжатия, включая DEFLATE, Quantum и LZX. Эти алгоритмы предлагают разный уровень сжатия и производительности, что позволяет выбрать наиболее подходящий метод для конкретной ситуации. Из-за специфичности формата CAB, не все архиваторы поддерживают его создание, однако существует несколько инструментов, которые могут помочь в создании таких архивов.
Пример
Рассмотрим несколько способов создания .cab файлов:
-
Makecab.exe — встроенная в Windows утилита командной строки, которая позволяет создавать .cab файлы. Она может быть полезна для простых задач, когда необходимо сжать список файлов в один архив. Для использования makecab необходимо сначала создать текстовый файл со списком всех файлов, которые нужно сжать:
dir C:\FolderName /s /b /a-d > c:\temp\files.txt
Далее, используем команду:
makecab /d CabinetName1=test.cab /D DiskDirectoryTemplate=C:\temp /f c:\temp\files.txt
-
CabArc.exe — это утилита, которая позволяет создавать и управлять .cab файлами через командную строку. Пример команды для создания архива:
cabarc -m LZX:21 -p -r N ..\outfile.cab *.*
Применение
Для более сложных сценариев, такие как обновление существующих архивов или изменение файлов в существующем .cab, полезно использовать GUI-инструменты, такие как CabMaker. Этот инструмент предоставляет графический интерфейс для более интуитивного управления архивированием и упрощает работу с файлами.
Процесс создания и обновления .cab файла:
-
Экстракция файлов:
Откройте командную строку и используйте командуexpand
, чтобы извлечь файлы из старого архива:expand -F:* \Path\To\OldCabFile.cab \Path\To\ExtractedFiles
-
Изменение содержимого:
После экстракции можно внести необходимые изменения в файлы или структуру папок. -
Создание нового архива:
Используйте CabMaker или команду makecab с модифицированным списком файлов для создания нового .cab архива.
Такие мощные инструменты и методы позволяют эффективно управлять сжатием данных, поддерживая структуру и размер файла в рамках допустимых лимитов. Сложный процесс создания и манипулирования .cab файлами может быть значительно упрощен с помощью специализированных утилит и методов, что особенно полезно для задач, связанных с настройкой окружений или миграцией программного обеспечения.
Рекомендации
При выборе метода создания файлов .cab стоит обратить внимание на масштаб задачи. Встроенные средства Windows подойдут для простых задач, тогда как сложные сценарии требуют более функциональных решений с графическим интерфейсом или более детальной настройкой параметров сжатия. Необходимо также учесть лимиты формата .cab и при необходимости разбить данные на более мелкие загружаемые или интегрируемые части.
Таким образом, знание различных инструментов и методов добавляет гибкости в работу с .cab файлами, что позволяет достигать оптимальных результатов с минимальными затратами времени и ресурсов.