5

我决定根据makecab.exe我的要求在我的应用程序中创建 cab 文件。 http://msdn.microsoft.com/en-us/library/bb417343.aspx#microsoftmakecabusersguide

而且我需要根据给定的路径存储文件,无论是相对路径还是绝对路径,并在保留原始路径的情况下提取文件。所以我将为此使用指令文件并将该输入提供给 makecab 命令。

windows 命令提示符 zip/compress 目录

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

请帮助我了解如何将所需的 cab 文件名指定为目标(我将从用户输入中获取 cab 文件名)?

此外,是否可以在第二次运行 makecab 命令时将更多文件附加到现有 cab 文件?

4

2 回答 2

6

终于找到了解决办法。

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

DiskDirectoryTemplate=template[输出目录名模板;* 替换为磁盘号]
CabinetNameTemplate=template [机柜文件名模板;* 替换为柜号]

Microsoft MakeCAB 用户指南中的描述

DiskDirectoryTemplate =模板

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

默认值: .Set DiskDirectoryTemplate=DISK* ; 默认为 DISK1、DISK2 等。

当 MakeCAB 处理一个指令文件时,它将创建一个或多个磁盘“映像”。然而,MakeCAB 并没有使用某种特定的磁盘格式,而是简单地为每个磁盘创建一个子目录,并将每个磁盘的文件放在适当的目录中。如果*此变量中存在 a,则将其替换为磁盘号。如果未*指定,则所有文件都放置在此变量指定的单个目录中。

仅当磁盘 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

橱柜名称模板 = 模板

设置cabinet 文件名模板。

默认:.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 =文件名

指定文件柜的文件名。

默认: ; 默认情况下,这些变量均未定义

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

例子:

.Set CabinetName2=test2.cab
于 2013-04-11T07:38:41.800 回答
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 文件。

其他有用的参考: Microsoft 机柜参考。makecab.exe 详细信息。

于 2018-04-26T17:04:50.763 回答