我决定使用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