|
简单问题简单化,单文件,单目录,多文件,多目录,多重目录最大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
下载文件包: 原版:
ncab112.rar
(2.07 KB, 下载次数: 1314)
zxw修改版: 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 编辑 ] |
评分
-
查看全部评分
|