我决定使用makecab.exe
来满足我在应用程序中创建cab文件的要求。
http://msdn.microsoft.com/en-us/library/bb417343.aspx#microsoftmakecabusersguide
我需要按照给定的路径存储文件,无论是相对的还是绝对的内部cab,并保留原始路径的提取文件。所以我将使用指令文件并将该输入提供给makecab命令。
windows command promt zip/compress directory
但是cab输出存储在Disk1 \ 1.cab。
文件夹中请帮助我知道如何指定所需的cab文件名作为目的地(我将从用户输入中取出cab文件名)?
此外,是否可以在第二轮makecab命令中将更多文件附加到现有的cab文件中?
答案 0 :(得分:4)
终于找到了解决方案。
您可以在指令文件中设置以下两个变量,这两个变量将识别目标路径和cab文件的名称:
DiskDirectoryTemplate=template
[输出目录名称模板; *由磁盘号替换]
CabinetNameTemplate=template
[文件柜文件名模板; *由机柜号码取代]
来自Microsoft MakeCAB User's Guide
的说明<强> DiskDirectoryTemplate 强> =模板
设置输出目录名称模板。为其创建一个目录 布局的每个磁盘。
默认值:.Set DiskDirectoryTemplate = DISK *;默认为DISK1,DISK2, 等。
当MakeCAB处理指令文件时,它将创建一个或多个 磁盘“图像”。但是,不是使用某些特定的磁盘格式, MakeCAB只为每个磁盘创建一个子目录并放置 适当目录中每个磁盘的文件。如果存在
*
这个变量,然后用磁盘号替换。如果没有*
指定后,所有文件都放在指定的单个目录中 通过这个变量。仅当不存在变量DiskDirectoryn时才使用此变量 disk n。
示例:
.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, ...
此模板用于构造每个文件柜的文件名。
*
在此模板中,将由机柜编号(1,2等)替换。这个 仅当cabinet没有变量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 =文件名
指定文件柜的文件柜文件名。
默认:;默认情况下,这些变量都没有定义
如果这样 没有为特定磁盘定义变量,然后MakeCAB使用 CabinetNameTemplate构造机柜名称。
示例:
.Set CabinetName2=test2.cab
答案 1 :(得分:1)
如果您确切知道源文件的存在位置,则可以从目录生成文件列表:
dir C:\FolderName /s /b /a-d > c:\temp\files.txt
然后使用files.txt文件创建cab文件。
makecab /d CabinetName1=test.cab /D DiskDirectoryTemplate=C:\temp /f c:\temp\files.txt
上面的命令将使用之前生成的文件列表在C:\ Temp文件夹中生成test.cab文件。