Используйте makecab, чтобы сжать всю папку
Я вижу, есть хороший способ в этом посте
чтобы сжать папку, используя makecab. Одна проблема с вышеупомянутым сценарием состоит в том, что он не может обработать длинное имя файла (с длинным именем расширения). Например, если у меня есть файл с именем файла somelongfilename.extension, после того, как я заархивирую и разархивирую, имя файла будет SOMELO~1.EXT. Кто-нибудь может указать мне способ исправить это?
1 ответ
Я сделал подобное в последнее время. Но я использую внешний инструмент под названием DDFGenerator. Он бесплатный и маленький и правильно обрабатывает длинные имена файлов.
Для сжатия структурированных папок и файлов с помощью makecab.exe необходим файл DDF. Вместо того, чтобы использовать пакетный скрипт, упомянутый в ответе, который вы цитировали, я использовал DDFGenerator для той же цели.
Скажем, папка, которую вы хотите "сжать", находится в 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:* .