使用makecab压缩整个文件夹

时间:2017-02-26 20:09:09

标签: zip directory filenames makecab

我看到这篇文章有一个很好的方法

How can I compress (/ zip ) and uncompress (/ unzip ) files and folders with batch file without using any external tools?

使用makecab压缩文件夹。上述脚本的一个问题是它无法处理长文件名(具有长扩展名)。 Fox的例子,如果我有一个带文件名的文件,somelongfilename.extension,在我压缩和解压缩之后,文件名将是SOMELO~1.EXT。任何人都可以指导我修复它的方法吗?

1 个答案:

答案 0 :(得分:0)

我最近做过类似的事情。但我使用一个名为DDFGenerator的外部工具。它是免费的,小的,它可以正确处理长文件名。

要使用makecab.exe压缩结构化文件夹和文件,必须使用DDF文件。我没有使用你引用的答案中提到的批处理脚本,而是将DDFGenerator用于同一目标。

DDFGenerator on CodePlex

说,你想要“压缩”的文件夹位于C:\ MyFolder \ MyData,使用此命令在C:\ MyFolder生成一个名为“solution.ddf”的DDF文件:

DDFGenerator "C:\MyFolder"

请注意,DDFGenerator.exe会在您提供的文件夹下“迭代”文件,因此要压缩C:\ MyFolder \ MyData,您应该将“C:\ MyFolder”传递给它并确保MyData是C中的唯一项目: \ MyFolder中。

生成solution.ddf后,需要进行小的调整。只需使用您喜欢的任何文本编辑器打开“solution.ddf”并进行以下更改:

替换这两行(在一开始):

.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}替换为符合您需要的任何内容) 这些变化确保不会分裂并具有更好的压缩比。

然后,在C:\ MyFolder上运行makecab命令来构建cab:

makecab.exe /F solution.ddf

完成后,{YourCabName} .cab将位于C:\ MyFolder \ disk1下。只需将其删除并删除已生成的其他文件。

要在当前路径“解压缩”驾驶室,请使用命令:

expand {YourCabName}.cab /F:* .