Windows自带压缩文件工具makecab命令详解

本文详细介绍了Windows自带的压缩工具makecab的使用,包括如何压缩单个文件、一个文件夹下的多个文件,以及进阶的bat或vbs使用方法。通过makecab,可以在没有第三方压缩软件的情况下进行文件压缩和解压缩操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当给女生修电脑上没有winrar、7z等压缩工具,并且还没网络你U盘还掉了的时候


目录

makecab
一、单个文件
二、一个文件夹下的多个文件

三、进阶 bat or vbs
四、注意事项
五、帮助信息
六、参考


makecab

用法一:
    a.先建立ddf文件(含设置及文件列表), 如:Sample.ddf
    b. 进入命令行格式 输入 makecab /f Sample.ddf
用法二
    a.先建立txt文件(文件列表)
    b.makecab /f list.txt /d compressiontype=mszip /d compressionmemory=21 /d maxdisksize=1024000000 /d diskdirectorytemplate=dd* /d cabinetnametemplate=dd*.cab

一、单个文件

1.0、准备一个文件fad.txt

cd /d C:\Old
del fad*
dir /s /b /a-d PrintSpoofer > fad.txt

1.1、压缩单文件
makecab fad.txt fad.zip /v
makecab /d compressiontype=mszip fad.txt fad.mszip.zip /v
makecab /d compressiontype=lzx fad.txt fad.lzx.zip /v
系统将显示压缩过程和压缩结果,类似如下:

Cabinet Maker - Lossless Data Compression Tool

  0.00% - raw=0  compressed=0
100.00% - raw=9,753  compressed=0
100.00% - raw=9,753  compressed=2,654
** fad.txt placed in cabinet fad.lzx.zip(0) on disk
100.00% [flushing current folder]

1.2、解压命令
expand fad.zip fad.zip.txt
expand fad.mszip.zip fad.mszip.txt
expand fad.lzx.zip fad.lzx.txt
系统将显示压缩过程和压缩结果,类似如下:

Microsoft (R) 文件扩展实用程序版本 6.1.7600.16385
版权所有 (c) Microsoft Corporation。保留所有权利。

正在将 C:\Old\fad.lzx.txt 添加到提取队列

正在展开文件 ....

完成展开文件 ...

1.3、md5sum fad*.txt

9d4d9de23b12a5ceda4854ce539a79be *fad.lzx.txt
9d4d9de23b12a5ceda4854ce539a79be *fad.mszip.txt
9d4d9de23b12a5ceda4854ce539a79be *fad.txt
9d4d9de23b12a5ceda4854ce539a79be *fad.zip.txt

1.4、del fad*.txt && md5sum fad*

f1ad8a85b2eaaf06b0f916ca99c380e8 *fad.lzx.zip
5106c05b2aa7ae6bbc881909bccc99fa *fad.mszip.zip
5106c05b2aa7ae6bbc881909bccc99fa *fad.zip

二、一个文件夹下的多个文件

如果目录里面有多个文件,那么就需要编写一个文件列表文件,用来告诉MakeCAB,有多少文件需要打包。
指定压缩类型及使用内存的大小
var:compressiontype 压缩类型,有:none、 mszip、 lzx
var:compressionmemory 压缩率,在lzx类型下需指定:范围15--21
详细说明请看这里

2.1、准备一文件列表文件
dir /s /b /a-d PrintSpoofer > fad.txt

2.2、默认以mszip方式压缩并显示详细信息
makecab /F fad.txt /d maxdisksize=1001024000 /v

2.3 采用高压缩比,会非常非常慢
makecab /f fad.txt /d compressiontype=lzx /d compressionmemory=21 /d maxdisksize=1001024000 /v

2.4 人生苦短,PrintSpoofer下有多级子目录,有重复文件名,so,'Oh man'.
cd PrintSpoofer
dir /b /a-d PrintSpoofer > fad.txt
makecab /f fad.txt /d compressiontype=lzx /d compressionmemory=21 /d maxdisksize=1001024000 /v

 

三、进阶 bat or vbs

下面的是没有测试的,原因是英俊如我体重增加了看不到夏天。

    @echo off
    if "%~1"=="" goto :eof
    setlocal enableDelayedExpansion
    cd/d %~dp1
    set List=L.lst
    cd.>%List%
    for /f "delims=" %%f in ('"dir/b/a-d "%~f1" 2>nul"')do echo="%~nx1\%%f">>%List%
    for /f "delims=" %%d in ('dir/s/b/ad "%~f1"')do (
     set D1=%%d
     set D1=!d1:%~f1\=!
     echo=.set DestinationDir=!D1!>>%List%
     for /f "delims=" %%f in ('"dir/b/a-d "%%d" 2>nul"')do echo="%%d\%%f">>%List%
    )
    makecab /f %List% /d CabinetNameTemplate="..\%~n1.CAB"
    rd/s/q disk1
    del/a/f/q setup.inf;setup.rpt;%List%

四、注意事项

  1.  文件名中有空格需要把文件名用""引起来
  2.  同一个目录下的文件是不会重名的,一个多级目录却可能会
  3.  对于多个目录下或者单个目录下多级目录中存在重复文件名的将报错,推荐bat或者vbs
  4.  错误信息包括但不限于
  • ERROR: Duplicate file name: PrintSpoofer.lastbuildstate already defined at f.txt(128)
  • ERROR: MakeCAB aborted: MaxErrors (20) exceeded
  • ERROR: Compression Memory not in range (10..21): 32
  • ERROR: Could not find file: XXX

五、帮助信息

makecab /?

语法

makecab [/v[n]] [/d var=<value> ...] [/l <dir>] <source> [<destination>]
makecab [/v[<n>]] [/d var=<value> ...] /f <directives_file> [...]

参数

表 1
参数说明
<source>要压缩的文件。
<destination>用于指定压缩文件的文件名。 如果省略,则使用下划线()替换源文件名称的最后一个字符,并将其用作目标。
/f <directives_file>具有makecab指令的文件(可以重复)。
/d var =<value>定义带有指定值的变量。
/l<dir>目标位置(默认为当前目录)。
/v [<n>]设置调试详细级别(0 = 无,..., 3 = 完全)。
/?在命令提示符下显示帮助。

六、参考

https://www.cnblogs.com/hookjoy/p/9339872.html
https://my.oschina.net/hkmax/blog/144293
http://www.bathome.net/thread-10715-1-1.html
https://docs.microsoft.com/en-us/previous-versions/bb417343(v=msdn.10)?redirectedfrom=MSDN#variable-summary
https://docs.microsoft.com/en-us/archive/blogs/askds/command-line-compression-in-core
https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/makecab

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值