NicTense 发表于 2011-2-26 02:53:43

【3.3更新】NCAB 右键最大CAB压缩批处理(XP/WIN7/PE通用,支持多层目录/PE驱动优化)

简单问题简单化,单文件,单目录,多文件,多目录,多重目录最大CAB压缩一个右键菜单全解决

安装NCAB后会在文件和目录右键菜单中增加“最大CAB压缩”选项,以及在“发送到”菜单中增加“NCAB最大压缩”选项

2011.03.03更新V1.12
1、目录压缩时,修改排序方式为,inf优先的前提下按名称升序
2、修正某些PE下由于\nul方式判断是否目录返回错误结果导致的错误,换了一种更为准确的判断方式
3、重写主要代码,不再需要attrib.exe,并完善在某些特定机器、特定系统的特殊设置下可能导致的错误

没想到几行代码竟然写了这么多个版本,批处理太神奇了,或者是本人知识严重缺乏,没想到判断是否目录都废这么大周折
如果没发现bug的话,这版应该是最终版了。

2011.03.03更新V1.10
1、增加 发送到->NCAB最大压缩 菜单,主要用处是选择多个文件和目录时只打开一个窗口(如果同时选择几千个文件和目录然后右键最大cab压缩会同时打开几千个窗口,可能导致系统崩溃,所以当同时选择的文件比较多时,推荐用发送到菜单的方式进行)
2、修正同时选择多个目录时右键最大CAB压缩菜单时,因生成同名文件导致除第一个目录外,其他目录无法生成压缩文件的错误。
3、增加对多文件多目录的拖放支持
在此特别感谢参与测试反馈和提出改善建议的各位朋友。

2011.03.02更新V1.05
修正路径中含有空格时可能导致的错误,并增加卸载功能

单文件/单目录

直接右键菜单“最大CAB压缩”,支持多重目录,压缩包内最外层的目录路径将被忽略,空白目录也将被忽略,另外,压缩包已针对PECMD的DEVI命令做了优化处理,即每个目录中的inf文件放在最前面。若希望压缩包内包含当前目录的路径,请新建一个目录,把当前目录拖进该目录后,在该目录上右键菜单。

多文件/多目录

压缩为多个文件:同时选择多个文件或目录后右键菜单,最大CAB压缩菜单会同时打开多个窗口多进程压缩,发送到NCAB最大压缩则单个窗口单进程压缩
压缩为单个文件:建一个空目录,把所有要压缩的文件和目录拖进该目录后,在该目录上右键菜单

XP/VISTA/WIN7系统右键菜单安装:

直接双击ncab.cmd,询问操作时输入I并回车即可(vista/win7下需用管理员身份)

WinPE右键菜单安装:

将ncad.cmd文件添加到PE内核的system32目录下,并在PECMD.INI里增加下面这行即可
EXEC !%SystemRoot%\system32\ncab.cmd /reg

直接调用格式:

ncab 文件或目录名

也可以直接将要压缩的文件或目录直接拖放到批处理图标上,支持多文件/目录拖放操作。

卸载NCAB

双击或直接运行NCAB.CMD,询问操作时输入U并回车即可(vista/win7下需用管理员身份)


原帖发自:http://hi.baidu.com/nictense/blog/item/e4ddcf677eda4330aa184c66.html

下载文件包: 原版:    zxw修改版:http://bbs.wuyou.net/images/attachicons/binary.gif ncab.7z (用另一种方式创建发送到链接)

注:如果用于未集成ncab的TangoPE,请自行在 :reg 下面增加下面这行,以确保不会出现重复菜单
reg delete HKCR\*\shell\zipcab /f>nul 2>nul

ncab.cmd源代码
@echo off
::V1.12 Build 2011.03.03 By NicTense
::http://hi.baidu.com/nictense
setlocal enableextensions
setlocal enabledelayedexpansion
if "%~1"=="" goto action
if /i "%~1"=="/reg" goto reg
:cab
if not exist "%~1" exit
dir "%~1" /ad>nul 2>nul||makecab.exe /V3 /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=0 /L "%~dp1." "%~1"&&goto next
pushd "%~f1\"
set /p=<nul>"%temp%\%~n1.tmp"
for /f "tokens=*" %%b in ('dir *.inf /a-d /on /b 2^>nul') do echo "%~f1\%%~b">>"%temp%\%~n1.tmp"
for /f "tokens=*" %%b in ('dir * /a-d /on /b 2^>nul') do if /i "%%~xb" neq ".inf" echo "%~f1\%%~b">>"%temp%\%~n1.tmp"
for /f "tokens=*" %%a in ('dir * /s /ad /on /b 2^>nul') do (
set d=%%~a
set d=!d:%~f1\=!
for /f "usebackq tokens=*" %%b in (`dir "%%~a\*.inf" /a-d /on /b 2^>nul`) do echo "%%~a\%%~b" "!d!\%%~b">>"%temp%\%~n1.tmp"
for /f "usebackq tokens=*" %%b in (`dir "%%~a\*" /a-d /on /b 2^>nul`) do if /i "%%~xb" neq ".inf" echo "%%~a\%%~b" "!d!\%%~b">>"%temp%\%~n1.tmp"
)
makecab.exe /V3 /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=0 /D FolderSizeThreshold=2147483648 /D DiskDirectoryTemplate="%~dp1." /D CabinetNameTemplate="%~n1.cab" /D InfFileName="%temp%\%~n1.inf" /D RptFileName="%temp%\%~n1.rpt" /F "%temp%\%~n1.tmp"
for %%a in (inf rpt tmp) do del /q "%temp%\%~n1.%%a">nul 2>nul
:next
if "%~2" neq "" shift&goto cab
exit
:action
echo             NCAB V1.12 文件/目录最大CAB压缩右键菜单 By NicTense
echo.
set /p o=请选择您要进行的操作:( I 安装 / U 卸载 / Q 退出 )
if /i "%o%"=="I" goto reg
if /i "%o%"=="U" goto uninstall
if /i "%o%"=="Q" exit
cls&goto action
:reg
reg add HKCR\*\shell\最大CAB压缩\command/ve /t REG_SZ /d "%SystemRoot%\system32\ncab.cmd \"%%1\"" /f>nul 2>nul
reg add HKCR\Directory\shell\最大CAB压缩\command/ve /t REG_SZ /d "%SystemRoot%\system32\ncab.cmd \"%%1\"" /f>nul 2>nul
if /i "%o%" neq "I" PECMD.EXE LINK %SendTo%\NCAB最大压缩,%SystemRoot%\system32\ncab.cmd&exit
2>nul reg query HKCR\Directory\shell\最大CAB压缩\command|FIND /i "ncab.cmd">nul||goto needadmin
copy /y "%~0" "%SystemRoot%\system32\ncab.cmd">nul
if exist "%~dp0ncab.lnk" copy /y "%~dp0ncab.lnk" "%USERPROFILE%\SendTo\NCAB最大压缩.lnk">nul
echo.&echo 安装成功,您现在可以在任意文件或目录上使用最大CAB压缩右键菜单了。&echo.&echo 按任意键退出...&pause>nul&exit
:uninstall
reg delete HKCR\*\shell\最大CAB压缩 /f>nul 2>nul
reg delete HKCR\Directory\shell\最大CAB压缩 /f>nul 2>nul
reg query HKCR\Directory\shell\最大CAB压缩>nul 2>nul&&goto needadmin
del /q "%SystemRoot%\system32\ncab.cmd">nul 2>nul
del /q "%USERPROFILE%\SendTo\NCAB最大压缩.lnk">nul 2>nul
echo.&echo 卸载成功,相关文件和右键菜单已删除。&echo.&echo 按任意键退出...&pause>nul&exit
:needadmin
echo.&echo 操作失败,您没有相关的权限,请退出后用管理员身份重新运行本程序。&echo.&echo 按任意键退出...&pause>nul&exit由于要压缩驱动包,习惯了右键菜单,不喜欢额外再用个什么工具,一阵选择乱点的太麻烦了,又占地方,所以写了这个批处理。

解压密码双击压缩包即可看到。

[ 本帖最后由 NicTense 于 2011-3-8 20:58 编辑 ]

blithewind 发表于 2011-2-26 03:02:02

多文件及目录操作很好,方便!

blithewind 发表于 2011-2-26 03:04:16

呃,#1中直接下载地址没弄好,应该是:http://u.115.com/file/f44d4a87ef

不过下不了。

[ 本帖最后由 blithewind 于 2011-2-26 03:08 编辑 ]

NicTense 发表于 2011-2-26 03:07:46

原帖由 blithewind 于 2011-2-26 03:04 发表 http://bbs.wuyou.net/images/common/back.gif
呃,#1中直接下载地址没弄好,应该是:http://u.115.com/file/f44d4a87ef

呵呵,晕乎晕乎的,刚才的版本把单文件压缩成.cab好像不太好,改回 .??_的格式,所以重新上传了

其实那个地址也无所谓,就一个cmd文件,直接copy源代码自己保存也一样

睡觉去了,3点睡觉,6点还得起床,命苦啊~~

blithewind 发表于 2011-2-26 03:11:26

原帖由 NicTense 于 2011-2-26 03:07 发表 http://bbs.wuyou.net/images/common/back.gif


呵呵,晕乎晕乎的,刚才的版本把单文件压缩成.cab好像不太好,改回 .??_的格式,所以重新上传了

其实那个地址也无所谓,就一个cmd文件,直接copy源代码自己保存也一样

睡觉去了,3点睡觉,6点还得起床 ...
哦,我说怎么都下不了呢。
压缩成*.??_是比较通常的做法,方便。
是否可以增加多*.??_文件或者目录解压呢?有时会用到,一个个解麻烦。

NicTense 发表于 2011-2-26 03:13:47

原帖由 blithewind 于 2011-2-26 03:11 发表 http://bbs.wuyou.net/images/common/back.gif

哦,我说怎么都下不了呢。
压缩成*.??_是比较通常的做法,方便。
是否可以增加多*.??_文件或者目录解压呢?有时会用到,一个个解麻烦。


我电脑上有7zip,直接右键解压到当前目录就可以了,无论多少个文件

如果不装7zip,添加一个注册表项就可以了,用winrar就可以解压的,明天再聊,先睡觉了

zxyy 发表于 2011-2-26 08:23:46

楼主的方法不错,在你的PE核心中看到过,很方便的啊。

[ 本帖最后由 zxyy 于 2011-2-26 08:25 编辑 ]

NicTense 发表于 2011-3-2 10:29:58

有没有测试过发现什么Bug之类的,没有就定案了。

zxyy 发表于 2011-3-2 10:46:09

只是在迷你版中压缩了几个小文件,暂没有发现BUG。

wangxing 发表于 2011-3-2 10:58:34

下载了提示要解压呀密码?

NicTense 发表于 2011-3-2 11:00:58

回复 #10 wangxing 的帖子

双击就能看到密码啊,或者你直接copy源代码另存为也一样

zxw 发表于 2011-3-2 11:03:16

回复 #10 wangxing 的帖子

用winrar查看注释

wangxing 发表于 2011-3-2 11:06:07

原帖由 NicTense 于 2011-3-2 11:00 发表 http://bbs.wuyou.net/images/common/back.gif
双击就能看到密码啊,或者你直接copy源代码另存为也一样

好的 是我大意了 谢谢!

迷离境界 发表于 2011-3-2 11:06:22

试了下,对于目录的,好像不行哦

NicTense 发表于 2011-3-2 11:16:00

回复 #14 迷离境界 的帖子

如果目录不是很小的话,右键最大cab压缩后会有一个命令行窗口在工作,要等工作完了才会看到生成的文件,临时文件都被设定在临时目录

你是不是关掉了或者隐藏了那个窗口了(被其他窗口盖住了)

NicTense 发表于 2011-3-2 11:26:47

我知道了,好像是空格的问题,试一下这个

迷离境界 发表于 2011-3-2 11:29:37

回复 #16 NicTense 的帖子

对于文件夹的,命令行窗口都是一闪而过,而单文件的可以压缩
试了16#的也是一样

NicTense 发表于 2011-3-2 11:34:17

原帖由 迷离境界 于 2011-3-2 11:29 发表 http://bbs.wuyou.net/images/common/back.gif
对于文件夹的,命令行窗口都是一闪而过,而单文件的可以压缩
试了16#的也是一样

运行一下 notepad %temp%\cab.tmp

看看能不能打开这个文件,如果可以帮忙贴一下内容


对了,16楼那个有没有重新安装啊?我测试了各种情况,好像都没问题啊

[ 本帖最后由 NicTense 于 2011-3-2 11:36 编辑 ]

迷离境界 发表于 2011-3-2 11:36:06

回复 #16 NicTense 的帖子

用下面这个可以,但是只对文件夹

安装:

@echo off
set  objfile=%SystemRoot%\system32\mkmaxcab.cmd
title 安装CAB压缩工具
echo ==========================
echo 开始生成工具文件...
echo @Echo Off>%objfile%
echo Title CAB文件夹最大压缩工具—无忧启动>>%objfile%
echo Set Prestr=MAKECAB /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=CDROM /D Cabinet=On /D Compress=On /D FolderSizeThreshold=5000000>>%objfile%
echo Set dirfull=%%~1>>%objfile%
echo Set dirpath=%%~dp1>>%objfile%
echo Set dirname=%%~nx1>>%objfile%
echo Set Cmdstr=%%Prestr%% /D DiskDirectoryTemplate="%%dirpath%%." /D CabinetNameTemplate="%%dirname%%.CAB">>%objfile%
echo Set Tempfile=%%TEMP%%\mkcabtmp.tmp>>%objfile%
echo If Exist "%%Tempfile%%" Del "%%Tempfile%%" ^>NUL>>%objfile%
echo SETLOCAL ENABLEDELAYEDEXPANSION>>%objfile%
echo For /f "delims=" %%%%i In ('dir "%%dirfull%%" /s /b /a-d') Do (>>%objfile%
echo        Set subname=%%%%i>>%objfile%
echo        Set "subname=!subname:%%dirfull%%\=!">>%objfile%
echo        Echo "%%%%i" "!subname!"^>^>%%Tempfile%%>>%objfile%
echo )>>%objfile%
echo ENDLOCAL>>%objfile%
echo %%Cmdstr%% /F %%Tempfile%%>>%objfile%
echo Del /F /S /Q "%%Tempfile%%" SETUP.INF SETUP.RPT ^>NUL>>%objfile%
echo Set Tempfile=>>%objfile%
echo Set Cmdstr=>>%objfile%
echo Set dirname=>>%objfile%
echo set dirpath=>>%objfile%
echo Set dirfull=>>%objfile%
echo Set Prestr=>>%objfile%
set  objfile=
echo ==========================
echo 开始添加注册表信息...
reg  add HKCR\Directory\shell\mkmaxcab
reg  add HKCR\Directory\shell\mkmaxcab /ve /d 用CAB最大压缩
reg  add HKCR\Directory\shell\mkmaxcab\command
reg  add HKCR\Directory\shell\mkmaxcab\command /ve /d "mkmaxcab.cmd \"%%1\""
echo 开始添加注册表信息...
echo 安装完毕
pause

===================================================================================

卸载:

@echo off
@echo 开始卸载CAB压缩程序
@echo 开始删除注册表项...
reg delete HKCR\Directory\shell\mkmaxcab /f
@echo 开始删除文件...
del %SystemRoot%\system32\mkmaxcab.cmd
@echo 卸载完毕
pause

[ 本帖最后由 迷离境界 于 2011-3-2 11:41 编辑 ]

迷离境界 发表于 2011-3-2 11:37:33

回复 #18 NicTense 的帖子

已经是用16#的了...

cab.tmp:

"C:\Documents and Settings\Administrator\桌面\Tftpd32\EUPL-EN.pdf"
"C:\Documents and Settings\Administrator\桌面\Tftpd32\tftpd32.chm"
"C:\Documents and Settings\Administrator\桌面\Tftpd32\tftpd32.exe"
"C:\Documents and Settings\Administrator\桌面\Tftpd32\tftpd32.ini"

[ 本帖最后由 迷离境界 于 2011-3-2 11:43 编辑 ]

NicTense 发表于 2011-3-2 11:47:30

回复 #20 迷离境界 的帖子

貌似在一些特定目录下会出错,我研究一下,不过呆会要出去,晚上再放出修正版本

迷离境界 发表于 2011-3-2 11:51:19

把文件夹或者单文件拖放到本CMD上,支持多目录,以前在论坛里找到的,参考下,弄个右键菜单的吧

[ 本帖最后由 迷离境界 于 2011-3-2 12:12 编辑 ]

NicTense 发表于 2011-3-2 12:44:05



这个应该可以了,不过还有一个问题,在win7/vista的系统目录里还是不行,因为需要管理员权限,还得研究一下怎么取得权限,其他地方应该没问题了

迷离境界 发表于 2011-3-2 13:06:21

回复 #23 NicTense 的帖子

文件夹或者单文件右键都正常,但拖拽到此CMD的话,文件夹的正常,单文件不行...

XP3系统下测试的,偶没WIN7系统试...
-------------------------------------


来个卸载的吧 ,O(∩_∩)O

@echo off
@echo 开始卸载CAB压缩程序
@echo 开始删除注册表项...
reg delete HKCR\*\shell\最大CAB压缩 /f
reg delete HKCR\Directory\shell\最大CAB压缩 /f
@echo 开始删除文件...
del %SystemRoot%\system32\ncab.cmd
@echo 卸载完毕
pause

[ 本帖最后由 迷离境界 于 2011-3-2 13:26 编辑 ]

zxw 发表于 2011-3-2 13:14:15

拖放单文件还是有问题。
右键单文件扩展名不符预期。

迷离境界 发表于 2011-3-2 13:17:44

回复 #25 zxw 的帖子

右键单文件扩展名压缩后为 ??_而不是.cab已经如一楼所说的了....

zxw 发表于 2011-3-2 16:30:30

YY了一下,解决右键单文件压缩问题。支持同目录下多文件多目录,添加了缷载功能。


[ 本帖最后由 zxw 于 2011-3-3 12:20 编辑 ]

NicTense 发表于 2011-3-2 19:14:02

单文件拖放不行是什么个情况阿,我测试了没有问题啊
单文件生成.cab是故意的,要.??_就右键,要.cab就直接命令行或拖放

2010eflying 发表于 2011-3-2 19:23:35

回复 #1 NicTense 的帖子

楼主辛苦了,先占个位置收藏。

zxw 发表于 2011-3-2 19:39:30

回复 #28 NicTense 的帖子

在我这里,单文件拖放生成的文件不在该单文件所在目录,经搜索,跑到%USERPROFILE%下去了。
加个 参数 就OK了: /L %~dp1
页: [1] 2 3 4
查看完整版本: 【3.3更新】NCAB 右键最大CAB压缩批处理(XP/WIN7/PE通用,支持多层目录/PE驱动优化)