菜鸟科技网

makecab命令如何压缩文件?

makecab 是 Windows 操作系统自带的一个命令行工具,其主要功能是创建 CAB 压缩文件,CAB (Cabinet) 文件是一种常见的压缩档案格式,类似于 ZIP 或 RAR,由微软开发,广泛用于 Windows 系统的软件分发、驱动程序安装包(如 .inf 文件引导的安装)和系统文件补丁中。

makecab命令如何压缩文件?-图1
(图片来源网络,侵删)

命令简介

makecab 的核心作用是将一个或多个文件和文件夹压缩成一个 .cab 文件,它不仅支持压缩,还支持对文件进行数字签名,这对于确保软件包的完整性和安全性非常重要。

语法格式

makecab 命令的基本语法如下:

makecab [/L <源文件夹>] [/D <定义名>=<值>] <源文件> [<目标文件.cab>]

或者,当你需要压缩整个目录时,更常见的用法是:

makecab /f <列表文件> [/L <源文件夹>] [/D <定义名>=<值>] <目标文件.cab>

主要参数详解

为了更好地理解,我们将参数分为几类:

makecab命令如何压缩文件?-图2
(图片来源网络,侵删)

核心参数 (必须或常用)

  • <源文件>: 指定要压缩的一个或多个文件,可以使用通配符 和 。
    • 示例: makecab C:\Temp\myapp.txt C:\Output\myapp.cab
    • 示例: makecab C:\Temp\*.dll C:\Output\libs.cab
  • <目标文件.cab>: 指定生成的 CAB 文件名和路径,如果省略,默认会在当前目录下生成一个名为 setup.inf 的 CAB 文件(不推荐省略)。
  • /f <列表文件>: 这是最强大的参数之一,它让你通过一个文本文件来精确控制要压缩哪些文件,以及它们的路径、属性等。
    • 列表文件格式:每行一个文件,格式为 目标路径=源路径
    • 示例列表文件 list.txt:
      MyApp.exe=C:\Source\bin\Release\MyApp.exe
      config.ini=C:\Source\config\default.ini
      \bin\helper.dll=C:\Source\lib\helper.dll
    • 使用列表文件: makecab /f list.txt C:\Output\MyApp.cab

选项参数

  • /L <源文件夹>: 当你使用通配符或列表文件时,此参数可以指定一个基础源文件夹,所有文件路径都将被视为相对于此文件夹的相对路径。
    • 示例: 假设文件结构为 C:\Project\files\file1.txtC:\Project\files\sub\file2.txt,执行 makecab /L C:\Project\files\ *.txt myfiles.cab 会将 file1.txtsub\file2.txt 压缩进 myfiles.cab
  • /D <定义名>=<值>: 用于向 CAB 文件中嵌入元数据(也称为“文件夹定义”),这些信息可以在解压时被读取。
    • 常用的定义名:
      • Name: CAB 文件或软件的名称。
      • Title: 软件的标题。
      • Provider: 提供者名称。
      • Version: 版本号。
      • Description: 描述信息。
    • 示例: makecab /D "Name=MyCoolApp" /D "Version=1.0.0" myapp.exe myapp.cab
  • /C: 如果源文件是另一个 CAB 文件,此参数会将其内容提取出来再重新压缩(很少使用)。
  • /V <数字>: 设置详细输出级别(Verbosity Level)。
    • /V0/V1: 最少输出(默认)。
    • /V2: 显示中等信息。
    • /V3/V4: 显示最详细的输出,包括文件名、压缩率等,对调试非常有用。

高级/签名参数

  • `/!: 在源文件路径前使用此符号,可以防止文件被压缩,而是作为“未压缩的存储”文件放入 CAB 中,对于某些已经高度压缩或需要直接读取的文件(如某些视频、音频格式)很有用。
  • /A: 强制替换目标文件(如果已存在)。
  • /J: 将一个已有的 CAB 文件追加到另一个 CAB 文件中(不常用)。
  • /P: 指定解压时需要显示的许可协议文件(.rtf.txt)。
  • /S: 在签名模式下使用,会调用 SignTool.exe 对生成的 CAB 文件进行签名。

实用示例

示例 1:压缩单个文件

C:\Temp\report.docx 压缩成 C:\Backups\report.cab

makecab C:\Temp\report.docx C:\Backups\report.cab

示例 2:压缩一个文件夹下的所有文件

C:\MyProject\src 文件夹下的所有 .log 文件压缩成 C:\MyProject\logs.cab

makecab C:\MyProject\src\*.log C:\MyProject\logs.cab

示例 3:使用列表文件精确控制压缩内容

假设你的项目文件分布在不同的目录,但你希望解压后它们都在一个特定的文件夹结构下。

  1. 创建列表文件 compress.txt:

    makecab命令如何压缩文件?-图3
    (图片来源网络,侵删)
    MyApp.exe=C:\Project\bin\MyApp.exe
    \data\config.json=C:\Project\config\settings.json
    \lib\net48\Newtonsoft.Json.dll=C:\Project\packages\Newtonsoft.Json.13.0.1\lib\net48\Newtonsoft.Json.dll
  2. 执行压缩命令:

    makecab /f compress.txt C:\Deployment\MyApp_v1.0.cab

    解压 MyApp_v1.0.cab 后,会得到一个包含 MyApp.exedata\config.jsonlib\net48\Newtonsoft.Json.dll 的目录结构。

示例 4:添加元数据信息

在压缩文件时,添加软件名称和版本号。

makecab /D "Name=DataAnalyzer" /D "Version=2.1.5" /D "Provider=MyCompany" C:\DataAnalyzer\*.exe C:\Releases\DataAnalyzer.cab

示例 5:使用详细输出模式进行调试

如果你想知道哪些文件被压缩了,压缩率如何,可以开启详细模式。

makecab /V3 C:\Temp\*.txt C:\Output\textfiles.cab

输出会类似这样:

2005-03-15  14:00:00  12345  <JU> 12345  mynote1.txt
2005-03-15  14:00:01  23456  <JU> 23456  mynote2.txt
...

<JU> 表示使用了 JCab 压缩算法(LZX),数字表示压缩前后的字节数。


expand 命令的配合使用

makecab 的“兄弟”命令是 expand,用于解压 CAB 文件。

解压语法:

expand [-r] <源文件.cab> -F:<目标文件> <目标路径>
  • -r: 递归解压,CAB 中包含目录结构,会一并创建。
  • -F:<目标文件>: 只解压 CAB 中的指定文件。

示例:

  1. 解压 C:\Backups\report.cab 到当前目录:
    expand C:\Backups\report.cab
  2. 解压 MyApp.cabC:\ExtractedApp 目录,并保持其内部结构:
    expand -r MyApp.cab -F:* C:\ExtractedApp
  3. 只解压 MyApp.cab 中的 MyApp.exe 文件:
    expand MyApp.cab -F:MyApp.exe C:\ExtractedApp

注意事项

  1. Windows 内置工具: makecab 是 Windows 安装的一部分,无需额外安装,在命令提示符或 PowerShell 中直接使用即可。
  2. 现代替代品: 对于日常的文件压缩和解压,.zip 格式更为通用,Windows 10/11 自带了强大的 tarzip 支持(通过 PowerShell 或命令行),用户界面也更友好。makecab 主要用于特定的开发场景,如创建 Windows 安装包、驱动程序或需要 CAB 格式的旧系统维护。
  3. 路径限制: 和许多命令行工具一样,路径中如果包含空格,最好用双引号括起来,"C:\My Documents\file.txt"

makecab 是一个功能强大但相对专业的命令行工具,掌握它对于 Windows 系统管理员和开发者来说非常有用,尤其是在处理软件打包和分发任务时。

分享:
扫描分享到社交APP
上一篇
下一篇