这个BAT是为了病毒满满的信管实验室而专门定制的,在这机房上了两年,跟病毒也玩了两年了,也都脸熟的不行不行的了,来来回回就那几个病毒不是autorun.inf就是Desktop__.ini要么就是game.exe啊.VBS神马的
这个机房的电脑一旦中毒RAR就无法使用,压缩解压都无法使用
但是无意间发现命令行版的RAR不受影响,依然可以坚挺可以使用,便用BAT做了一个使用命令行版RAR
¤特色1:在压缩时会从所有目录中自动屏蔽机房流氓病毒文件Desktop__.ini,这个文件很流氓,只要一插U盘
U盘里面所有的文件夹都会出现这个文件,每次回来都要删,后来麻烦的也不想管了
但是这个BAT在压缩文件的时候会自动屏蔽此文件,不把它压缩到包里面
¤特色2:在压缩时会加入5%的恢复记录,以防RP后可恢复损坏的RAR中的内容
机房的网络很渣B,经常在我这里运行好好的文件用飞秋发给别人就用不了了,中间传输损坏了
RAR也是,所以给RAR加上5%的恢复记录很有必要,防止打开不了还可以进行修复
==注意==
※在我制作测试的RAR 3.90版本中的命令行版RAR无法解压ZIP,7Z等其他格式的压缩包文件
这个问题很是怪异,用图形界面的WinRar就可以,用命令行版的RAR就不行,难道用的还不是一个内核????
所以在设计时如果拖放进ZIP,7Z等文件会被识别为“其他文件”而进行压缩 处理
而不会去解压,因为也解压不了,提示“不是RAR文件”。也可能后续的版本的命令行RAR支持了这个功能吧
※还有注意不能使用最后是.rar的文件夹,因为那样会被判断是压缩包文件而去解压这个文件夹
显然会报错,所以要先改名再压缩此文件夹,这个BAT做的还不是特别完善,比如这个地方就应该用
文件属性去判断是D的话则为文件夹,不管什么名字直接去压缩,但是用Attrib命令来获取目标属性很难
不是获取很难,获取很简单,关键是不好从一个字符串中提取出关键属性值,用findstr老也做不出来
遂放弃了,直接用目标是否含有扩展名来判断了,所有就会有出现结尾是.rar的文件夹的误判,这也没办法
通过做这个也学到另外几个知识:
1,set <变量名> 命令只有执行失败ERRORLEVEL才会更改为1,成功不会更改为0
2,程序中尽量不要给ERRORLEVEL手动赋值(如:set ERRORLEVEL=N),
否则会导致之后的ERRORLEVEL无法正常指示命令返回结果,ERRORLEVEL不再次手动更改,永远都为第一次设定值
所以ERRORLEVEL的值不到万不得已不要使用set命令进行人工赋值,除法你在后面的代码中不想再用ERRORLEVEL了
3,可以使用if "%%i"=="" 来判断变量是否为空,以前没注意过这个问题,今天才发现可以这么用
使用很简单,直接把要操作的文件拖放过来回车就行了
会自动判断是要解压还是要压缩,这里拖放过来一个C盘下的文件夹
(PS:不支持多文件拖放,应该是说CMD不支持)
回车自动判定为压缩文件,压缩完成后添加5%恢复记录
拖过一个RAR文件
自动判断为解压文件,解压完成,中途没有出现错误或警告
如果要解压的文件的目标文件名存在,则目标不可写,RAR提示没有解压任何文件
BAT也会提示:【注意】操作过程当中出现问题,请仔细查看操作过程提示信息
主界面不输入任何信息直接回车则进说明文档
批处理代码,复制保存到bat文件即可运行:
@echo off title 简易命令行RAR BY:小小沧海 ::set RAR=%ProgramFiles%\WinRAR\WinRar.exe set RAR=%ProgramFiles%\WinRAR\Rar.exe set file=null if NOT EXIST "%rar%" echo 【错误】您电脑上没有安装WinRAR,无法使用本程序&echo.&echo 按任意键退出...&pause>nul&exit :top cls echo *******简易命令行RAR*********** echo 请把想要操作的文件拖放至此处回车即可(只支持单文件或文件夹) echo 如若查看说明则回车 set file=help&set /p file= if %file%==help goto help if NOT EXIST %file% echo 输入的文件或文件夹不存在!请重新输入&pause>nul&goto top for /f "delims=" %%i in ("%file:"=%") do ( set exname=%%~xi ::判断是否有扩展名 if "%%~xi"=="" (set IsExname=N) else set IsExname=Y ) ::如果为Y,即有扩展名。再判断如果扩展名是rar,则解压,否则去压缩 ::如果为N,即无扩展名,则认定为文件夹或无扩展名文件,去压缩文件 if %IsExname%==Y ( if /i "%exname%"==".rar" (goto unrar) else goto rar ) else goto rar ::=========压缩文件======== :rar cls echo ^>^>压缩文件 for /f "delims=" %%i in ("%file:"=%") do ( "%RAR%" a -r -ep1 -rr5%% -xDesktop__.ini -x*\Desktop__.ini "%%i.rar" "%%i" ) goto check ::========解压文件========== :unrar cls echo ^>^>解压文件 for /f "delims=" %%i in ("%file:"=%") do ( md "%%~dpni" 1>nul 2>nul "%RAR%" x "%%i" "%%~dpni" ) ::=======检查执行结果======== :check if %ERRORLEVEL%==0 (echo.&echo 【恭喜】操作成功结束,按任意键返回主菜单...&pause>nul&goto top) else ( echo.&echo 【注意】操作过程当中出现问题,请仔细查看操作过程提示信息 echo 按任意键返回主菜单... pause>nul&goto top ) ::=======说明文档============ :help cls echo. echo ┏━━━━━━━━━━━━━━━━━说明━━━━━━━━━━━━━━━━━━┓ echo ┃ ¤此BAT是为了病毒横行的机房而做,因为一旦中毒RAR就无法使用,压缩解压都无 ┃ echo ┃ 法使用,但是发现命令行版的RAR不受影响依然可以使用,便做此命令行版RAR ┃ echo ┃ ¤特色1:在压缩时会从所有目录中自动屏蔽机房流氓病毒文件Desktop__.ini ┃ echo ┃ ¤特色2:在压缩时会加入5%的恢复记录,以防RP后可恢复损坏的RAR中的内容 ┃ echo ┃ ==注意== ┃ echo ┃ ※在我制作测试的RAR 3.90版本中的命令行版RAR无法解压ZIP,7Z等其他格式 ┃ echo ┃ 的压缩包文件,所以在设计时如果拖放进ZIP等文件会按照其他文件进行压缩 ┃ echo ┃ 处理,而不会去解压。但WinRar不受影响,也可能后续的版本支持了这个功能 ┃ echo ┃ ※注意不能使用最后是.rar的文件夹,因为那样会被判断是压缩包文件而去 ┃ echo ┃ 解压这个文件夹,显然会报错,所以要先改名再压缩此文件夹 ┃ echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ echo. echo 按任意键返回主菜单... pause>nul&goto top exit %ERRORLEVEL% 0 成功 %ERRORLEVEL% 1 失败 set exname只有执行失败ERRORLEVEL才会更改为1,成功不会更改为0 可以使用if "%%i"=="" 来判断变量是否为空
——原文发表于2011-6-19 23:16