Используйте makecab, чтобы сжать всю папку

Я вижу, есть хороший способ в этом посте

Как можно сжать (/ zip) и распаковать (/ unzip) файлы и папки с командным файлом без использования каких-либо внешних инструментов?

чтобы сжать папку, используя makecab. Одна проблема с вышеупомянутым сценарием состоит в том, что он не может обработать длинное имя файла (с длинным именем расширения). Например, если у меня есть файл с именем файла somelongfilename.extension, после того, как я заархивирую и разархивирую, имя файла будет SOMELO~1.EXT. Кто-нибудь может указать мне способ исправить это?

1 ответ

Я сделал подобное в последнее время. Но я использую внешний инструмент под названием DDFGenerator. Он бесплатный и маленький и правильно обрабатывает длинные имена файлов.

Для сжатия структурированных папок и файлов с помощью makecab.exe необходим файл DDF. Вместо того, чтобы использовать пакетный скрипт, упомянутый в ответе, который вы цитировали, я использовал DDFGenerator для той же цели.

DDF Генератор на CodePlex

Скажем, папка, которую вы хотите "сжать", находится в C:\MyFolder\MyData, используйте эту команду для создания файла DDF с именем "solution.ddf" в C:\MyFolder:

DDFGenerator "C:\MyFolder"

Обратите внимание, что DDFGenerator.exe выполняет итерацию файлов "в" папке, которую вы предоставляете, поэтому для сжатия C: \ MyFolder \ MyData вы должны передать ему "C:\MyFolder" и убедиться, что MyData является единственным элементом в C:\MyFolder.

После того, как solution.ddf был сгенерирован, необходима небольшая настройка. Просто откройте "solution.ddf" в любом текстовом редакторе и внесите следующие изменения:

Замените эти 2 строки (в самом начале):

.Set DiskDirectoryTemplate=CDROM
.Set CompressionType=MSZIP

Быть:

.Set CabinetName1={YourCabName}.cab
.Set CompressionType=LZX
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0

(Замените {YourCabName} на то, что соответствует вашим потребностям). Эти изменения гарантируют отсутствие разделения и лучшую степень сжатия.

Затем выполните команду makecab в C: \ MyFolder для сборки кабины:

makecab.exe /F solution.ddf

{YourCabName}.cab будет расположен в C:\MyFolder\disk1 после завершения. Просто возьмите его и удалите другие файлы, которые были сгенерированы.

Чтобы "разархивировать" кабину по текущему пути, используйте команду:

expand {YourCabName}.cab /F:* .
Другие вопросы по тегам