• [批处理]简易命令行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%WinRARWinRar.exe
    set RAR=%ProgramFiles%WinRARRar.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

  • 相关阅读:
    网络流相关题目
    【洛谷P3119】[USACO15JAN]草鉴定Grass Cownoisseur
    【洛谷八连测R6】yanQval-透明的星尘
    【洛谷八连测R6】yanQval-分离丧失的既视感
    【洛谷八连测R6】yanQval-不可逆的重启动
    【洛谷P2700】逐个击破
    【洛谷八连测R5】whzzt-Confidence
    【洛谷八连测R5】whzzt-Warmth
    【洛谷八连测R5】whzzt-Conscience
    【NOIP模拟赛】
  • 原文地址:https://www.cnblogs.com/xxcanghai/p/4583868.html
Copyright © 2020-2023  润新知