使用MakeCab.exe&.ddf文件(即使用指令文件)如何指定目标文件名称?

我决定使用makecab.exe来创build我的应用程序中的cab文件。 http://msdn.microsoft.com/en-us/library/bb417343.aspx#microsoftmakecabusersguide

而且我需要按照给定的path存储文件,无论是相对还是绝对的内部文件夹,并保留原始path的文件。 所以我将使用指令文件,并给makecab命令的input。

windows命令promt zip / compress目录

但驾驶室输出存储在文件夹Disk1 \ 1.cab中。

请帮我知道如何指定一个所需的cab文件名作为目的地(我将从用户inputcab文件名)?

另外,在makecab命令的第二次运行中,是否可以在现有的cab文件中附加更多的文件?

终于找到了解决办法。

您可以在指令文件中设置以下两个变量来识别cab文件的目标路径和名称:

DiskDirectoryTemplate=template [输出目录名称模板; *被磁盘号码取代]
CabinetNameTemplate=template [文件柜名称模板; *由机柜号码取代]

来自Microsoft MakeCAB用户指南的说明

DiskDirectoryTemplate =模板

设置输出目录名称模板。 为布局的每个磁盘创建一个目录。

默认值:.Set DiskDirectoryTemplate = DISK *; 缺省值是DISK1,DISK2等

由于MakeCAB处理指令文件,它将创建一个或多个磁盘“映像”。 但是,MakeCAB不是使用某种特定的磁盘格式,而是为每个磁盘创建一个子目录,并将每个磁盘的文件放在适当的目录中。 如果在这个变量中存在一个* ,那么它被替换为磁盘号。 如果没有指定* ,那么所有的文件都放在这个变量指定的单个目录中。

只有在磁盘n不存在变量DiskDirectoryn的情况下才使用此变量。

例子:

 .Set DiskDirectoryTemplate=C:\EXCEL6\DISK* ; Put files in separate dirs .Set DiskDirectoryTemplate=C:\EXCEL6 ; Put all files in C:\EXCEL6 .Set DiskDirectoryTemplate= ; Put all files in current dir 

CabinetNameTemplate =模板

设置橱柜文件名称模板。

默认值: .Set CabinetNameTemplate=*.CAB ; 1.CAB, 2.CAB, ... .Set CabinetNameTemplate=*.CAB ; 1.CAB, 2.CAB, ...

该模板用于构建每个机柜的文件名。 该模板中的*由柜号(1,2等)代替。 此变量仅在柜子n不存在变量CabinetNamen的情况下使用。

注:请确保扩展的机柜名称不超过您的文件系统的限制 ! 例如,如果您使用“CABINET * .CAB”,并且MakeCAB必须创建10个或更多个文件柜,那么您将拥有CABINET10.CAB这样的文件柜名,这是9.3,这在FAT文件系统中是无效名称。 不幸的是,MakeCAB直到它已经创建了9个机柜才会检测到这个!

例子:

 .Set CabinetNameTemplate=EXCEL*.DIA ; EXCEL1.DIA, EXCEL2.DIA, etc. .Set CabinetNameTemplate=*. ; 1, 2, 3, etc. 

此外,当文件被分割到整个cab(如果机柜大小超出其极限大小),则可以使用变量CabinetName n来设置后续的机柜文件名:

CabinetNamen=filename [柜号n的CabinetNamen=filename柜名称]

CabinetNamen =文件名

指定的文件柜的文件柜名称。

默认:; 默认情况下,没有定义这些变量

如果此变量未针对特定磁盘定义,则MakeCAB使用CabinetNameTemplate构造机柜名称。

例:

 .Set CabinetName2=test2.cab