# re: [原创]一个小小的Cab文件打包工具
2008-08-04 16:45
REALPLUG
谢谢了! 不过我还有一个CAB打包工具,是老毛桃制作的,也是调用makecab.exe来打包的,不过使用的是命令行,现在也给你分享其源码。如下: (注:将下列所有的字复制到记事本并保存为CMD即可。)
@Echo Off
Set TT=老毛桃制作的批量文件 CAB 打包工具
Set TS=如果你输入的路径或文件名中有空格,请在外边用上引号
COLOR 2F
TITLE %TT%
Set ERR=
Set C0=MAKECAB /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=CDROM /D Cabinet=On /D Compress=On /D FolderSizeThreshold=5000000
:BEGIN
CLS
Echo.
Echo ╭══════════════════╮
Echo ║ ║
Echo ╭═══┤ %TT%! ├═══╮
Echo ║ ║ ║ ║
Echo ║ ╰══════════════════╯ ║
Echo ║ ║
Echo ║ 您是需要将批量文件制作成一个压缩包呢? ║
Echo ║ 还是想生成 N 个 CAB 格式的单独压缩文件? ║
Echo ║ ║
Echo ║ [1] 将批量文件制作成一个压缩包 ║
Echo ║ [2] 将每个文件制作成单独压缩文件 ║
Echo ║ [3] 将单个文件制作成单独压缩文件 ║
Echo ║ [Q] 退出 ║
Echo ║ ║
Echo ╟──────────────────────────╢
Echo ║ 注:1. 待压缩文件的父目录需与本程序在同一路径下; ║
Echo ║ 2. 待压缩文件所在路径(包括父路径)不许有空格。 ║
Echo ╟══════════════════════════╢
Echo ║ 版权所有:老毛桃 仅供网友们交流,翻版不究 ║
Echo ╰──────────────────────────╯
Echo.
Set Choice=
Set /P Choice= 请选择要进行的操作(1/2/3/Q),然后按回车:
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
If /I '%Choice%'=='1' GOTO LOOPA
If /I '%Choice%'=='2' GOTO LOOPA
If /I '%Choice%'=='3' GOTO LOOPD
If /I '%Choice%'=='Q' EXIT
Goto BEGIN
:LOOPA
If /I '%Choice%'=='1' (
TITLE %TT% - 制作成一个压缩包
)
If /I '%Choice%'=='2' (
TITLE %TT% - 制作成多个单独压缩文件
)
If "%Err%"=="" (
CLS
)
Echo 请输入需压缩的文件所在的目录名,如 Files
Echo 注意:1.%TS%
Echo.
Set Ds=
Set /P Ds=请输入:
If %Ds%A==A (
Set Err=
Goto LOOPA
)
If Not Exist %Ds% (
Set Err=1
Echo.
CLS
Echo 您所输入的路径不存在,请重新输入
Echo.
Goto LOOPA
)
If /I '%Choice%'=='1' GOTO LOOPB
Goto LOOPC
:LOOPB
CLS
Echo 请输入需要保存的压缩包文件名,如 Drive.CAB
Echo 注意:1.%TS%
Echo.
Set FCab=
Set /P FCab=请输入:
If %FCab%A==A Goto LOOPB
Set C=%C0% /D DiskDirectoryTemplate=.\ /D CabinetNameTemplate=%FCab%
Set TF=%TEMP%\Files.tmp
If Exist "%TF%" Del "%TF%" >NUL
For %%i In (%Ds%) Do Set FP=%%~dpi
SETLOCAL ENABLEDELAYEDEXPANSION
For /f "delims=" %%i In ('dir %Ds% /s /b /a-d') Do (
Set str=%%i
Set "str=!str:%FP%%Ds%\=!"
>>%TF% Echo "%%i" "!str!"
)
ENDLOCAL
%C% /F %TF%
Del /F /S /Q "%TF%" SETUP.INF SETUP.RPT >NUL
Goto Exit
:LOOPC
CLS
Echo 请输入需要保存的 CAB 格式文件所在路径,比如 OutFile
Echo 如果此路径不存在,将在当前目录下自动创建。
Echo 注意:1.%TS%
Echo.
Set OUT=
Set /P OUT=请输入:
If %OUT%A==A Goto LOOPC
For %%i In (%Ds%) Do Set FP=%%~dpi
SETLOCAL ENABLEDELAYEDEXPANSION
For /f "delims=" %%i In ('dir %Ds% /s /b /a-d') Do (
Set str=%%~dpi
Set str=!str:%FP%%Ds%\=!
Set str=%OUT%\!str!
Set str=!str:~0,-1!
%C0% /L "!str!" "%%i"
)
ENDLOCAL
Goto Exit
:LOOPD
TITLE %TT% - 只压缩一个文件
If "%Err%"=="" (
CLS
)
Echo 请输入需要压缩的文件所在路径,比如 Driver\NV4_Disp.SYS
Echo 其中 Driver 与本程序在同一文件夹中
Echo 您也可以选择按 TAB 键快速输入路径和文件名称,完成后按回车确认
Echo.
Echo 注意:1.%TS%
Echo.
Set FileR=
Set /P FileR=请输入:
If %FileR%A==A (
CLS
Goto LOOPD
)
If Not Exist %FileR% (
Set Err=1
Echo.
CLS
Echo 您所输入的文件路径不存在,请重新输入
Echo.
Goto LOOPD
)
Goto LOOPE
:LOOPE
CLS
Echo 请输入需要保存的压缩文件路径,比如 Driver\NV4_Disp.CAB
Echo 如果不输入文件路径,则以 NV4_Disp.SY_ 的形式保存在本程序所在路径
Echo.
Echo 注意:1.如果尝试输入一个不存在的路径信息,压缩程序会出错!
Echo 2.%TS%
Echo.
Set FileT=
Set /P FileT=请输入:
%C0% %FileR% %FileT%
Goto Exit
:Exit
Echo.
Echo.
Echo.
Echo 您需要的操作已经全部完成,请核查. . .
Echo.
Echo 老毛桃感谢您的使用,如果您有什么好的建议,请 QQ 我!
Echo.
Echo.
Echo 请按任意键退出程序. . .
PAUSE >NUL 回复 更多评论