页首Html代码

[批处理]简易命令行RAR

这个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"=="" 来判断变量是否为空
View Code

——原文发表于2011-6-19 23:16

posted @ 2015-06-17 17:14  沧海月明FE  阅读(956)  评论(0编辑  收藏  举报