当给女生修电脑上没有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%
四、注意事项
- 文件名中有空格需要把文件名用""引起来
- 同一个目录下的文件是不会重名的,一个多级目录却可能会
- 对于多个目录下或者单个目录下多级目录中存在重复文件名的将报错,推荐bat或者vbs
- 错误信息包括但不限于
- 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> [...]
参数
参数 | 说明 |
---|---|
<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