Board logo

标题: [文件操作] 如何批处理rar文件解压并将其中的文件重命名为原文件名? [打印本页]

作者: linden    时间: 2009-3-1 12:45     标题: 如何批处理rar文件解压并将其中的文件重命名为原文件名?

如何将用批处理方法将大量rar文件解压并将其中的文件重命名为原RAR文件的文件名?
例:
当前文件夹内存在大量*.rar文件,如:批处理.rar 批处理之家.rar 学习BAT.rar …………
其中分别压缩了:PCL.doc PCLZJ.doc XXBAT.doc …………
如何将其都解压开并都重命名为:批处理.doc 批处理之家.doc 学习BAT.doc …………
请高手指教!谢谢!
作者: Batcher    时间: 2009-3-1 13:26

你的问题大致可以分解成以下几个小模块:
1、如何解压某个.rar文件
2、如何把解压出来的文件命名为原.rar文件名
3、如何对前面两步进行批量操作
请问具体哪个模块你不会?或者全部不会,只能等待别人给出完整代码?
发帖求助时,建议在帖子中描述清楚以下几点(有则改之无则加勉):

1、你的具体系统环境、应用程序环境是什么?你需要处理的数据长啥模样?

2、你为了解决自己的问题做出了哪些尝试?在google/baidu搜索了没?在本论坛搜索了没?阅读批处理基础教程了没?查阅系统自带的命令行帮助了没?

3、如果你曾经自己尝试着写过代码,但没能解决问题,请把你的完整代码贴出来,也许别人能够给你指出是什么地方出了问题,这样才更加有利于自己的进步。

作者: linden    时间: 2009-3-1 14:07     标题: 回复 2楼 的帖子

首先感谢回复。
以下是我的回答:
1.我是对这个让我手抽筋的重复性操作感到十分无奈!(只能狂汗!)所以才想到学一下批处理。
2.对于你的第一个问题我做过以下尝试:
   1)查看WINRAR手册,得到资料如下:
解压文件并包含完整路径的命令行语法是:

WinRAR X [-开关] <压缩文件> [文件] [@文件列表] [目标文件夹\]

解压文件并忽略路径是:

WinRAR E [-开关] <压缩文件> [文件] [@文件列表] [目标文件夹\]
   2)尝试在当前文件夹中创建一个test.bat文件,其中只有一句:WinRAR e *.rar *.*。结果不成功。
3.对于你的第二个和第三个问题我做过以下尝试:
   1)思路:使用dir >list.txt 命令记下所有RAR文件名,当第一步能够做到时,每解压一个就重命名一个。
   2)脑子里的代码: for %%a in (list.txt) do ((WinRAR x %%a.rar *.*) && (ren *.* %%a.*)

综上,经实践可知,尝试失败,故求助!能有可执行代码供我分析学习最好。在此先行谢过。
作者: defanive    时间: 2009-3-1 14:11

WinRAR安装目录下有UnRAR.exe,参考一下。。。
作者: Batcher    时间: 2009-3-1 14:20     标题: 回复 3楼 的帖子

论坛搜索“解压”,能找到不少实例,可以先学习一下。

以下是rar.exe自带的帮助:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Test>rar /?

RAR 3.60 beta 8    版权 (C) 1993-2006 Alexander Roshal    20 七月 2006
共享版本         输入 RAR -? 获得帮助

用法:     rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>
               <@列表文件...> <解压路径\>

[命令]
A 增加文件到压缩包,如果省略参数A也为添加文件,但不同的是添加当前路径文件到指定路径;另外如果-AD指定的目录带有\则不会添加子目录的文件:
RAR A .\BACKUP\MYRAR -AD %WINDIR%\IME      添加IME目录的所有文件(包含子目录)到当前目录的\BACKU\目录的MYRAR.RAR中,其中开关-AD可以不用.
RAR A .\BACKUP\MYRAR -AD %WINDIR%\IME\     情况同上,只是添加时不包含子目录中的文件   
RAR MYRAR %WINDIR%\SYSTEM                  添加当前目录的所有文件(不包含子目录)到%WINDIR%\SYSTEM\MYRAR.RAR中,同时删除当前目录的文件
RAR A MYRAR @BACK.LST                      根据BACK.LST列出的文件列表来压缩文件(这个功能有时很有用,用来备份指定文件)
RAR A -DF MYRAR C:\TEMP                    添加TEMP目录的所有文件(包含子目录)到MYRAR.RAR中后删除文件
RAR A -ED MYARR C:\TEMP E:\01 F:\          同上,只是添加多个目录到压缩包中并排除空目录,

D 从压缩文件包中删除指定文件
RAR D MYRAR BOOT.INI          从压缩包MYRAR中删除BOOT.INI文件
RAR D MYRAR                   删除压缩包MYRAR中的所有文件,实际上是删除压缩包WINRAR


I 在压缩包中搜索指定的字符串,支持可选参数i不区分大小写(默认);c区分大小写;h十六进制搜索;t使用ANSII UNICODE和OEM字符表(只使用WIN32)
RAR II=boot.ini -R myrar.rar           在当前目录的myrar.rar包含其子目录中不区分大小写查找字符串boot.ini(实际是该文件)
RAR II=boot.ini -r myrar.rar *.ini     在当前目录的MYRAR.RAR包中所有的子目录中的INI文件中查找BOOT.INI字符串(实际在包中的INI文件中找字符串,MYRAR.RAR可改成*.RAR表示所有包中查找)
RAR IC="First Level" -r c:\*.rar *.txt 在C:\*.RAR包中的*.txt中查找区分大小写的字符串"First Level"(注意有空格时使用引号)
RAR IH=f0e0aeaeab2d83e3a9 -R e:\text   在E:\TEXT目录下的所有压缩包中搜索十六进制字符串f0 e0 ae ae ab 2d 83 e3 a9

K 锁定压缩包以防止任何企图改变压缩文件的命令
RAR K MYRAR.RAR

L 列出压缩包中的所有文件及其他信息如压缩率等,如果只输出文件名则使用B变量,如果要更多信息则使用T变量,如果要想获取压缩包中的文件并带路径则使用V命令
RAR LB MYRAR.RAR>c:\file.lst  把压缩包中的文件名输出FILE.LST文件中
RAR VB MYRAR.RAR>C:\FILE.LST  把压缩包中的带路径的文件名输出到FILE.LST中

M 把文件移动到压缩包中并同时删除文件(实际上和RAR A -DF等同),如果指定-ED开关则不删除目录,注意这个命令与A命令的区别
RAT M MYRAR.RAR C:\TEMP     把C:\TEMP下包含子目录的所有文件移动到压缩包中并删除TEMP目录及其中的所有文件
RAR M -ED MYRAR.RAR C:\TEMP 把C:\TEMP下包含子目录的所有文件移动到压缩包中并删除TEMP目录中的所有文件但保留为空目录

R 修复压缩文件,注意的是如果没有修复记录(可以使用RR命令添加修复记录,最大可添加524288个恢复块),那么RAR对固定压缩文件的修复可能性极小,所以建议不要使用这种方式压缩;如果要修复卷则使用RC命令
RAR R -Y T.RAR            安静模式修复T.RAR压缩包
RAR RR3% MYRAR.RAR        把压缩文件%3的大小的恢复记录添加到压缩包中,如果是批处理需要把%3改为%%3或3p,另外可以不跟变量而有RAR自己决定,如 RAR RR MYRAR.RAR(可以使用RV命令添加卷修复记录,最大可添加524288个恢复块)
RAR RC MYRAR.PART003.RAR  修复卷PART003,需要事先使用RV添加卷修复记录
RAR RV3 MYRAR.PART003.RAR 添加卷修复记录,只对卷有效,可以不用变量N让RAR自己决定;这个命令有时很有效,如给朋友传文件时只用到卷内部分资料则可使用此命令而减少传其他卷的不必要  

RN 重命名压缩包中的文件名,需要注意的是如果RN命令会忽略以存在的文件,因此使用时要特别小心,RN命令好象对于子目录中的文件会忽略(即使加-R 开关一样)
RAR RN MYRAR.RAR readme.txt readme.bak *.dll *.dl_

S 转化压缩包为自解压格式,注意的是RAR同目录里必须有default.sfx模块,如果要从自解压格式中删除自解压default.sfx模块,则使用S-命令
RAR S MYRAR.RAR

X 从压缩包中带绝对路径解压指定文件到当前路径(不带路径则使用E命令,该命令会解压包含子目录的所有文件到当前根目录,一般不会用到),可以使用-Y开关覆盖已存在文件,使用-av-疲敝身份效检注释,-c-屏蔽显示注释,-ad指定要释放的路径
RAR X -Y MYRAR.RAR                      无提示带路径解压MYRAR.RAR到当前目录
RAR X -Y MYRAR.RAR -AD C:\01\           无提示带路径释放MYIRAR.RAR中包含目录中的所有文件到指定路径C:\01中
RAR X -Y -C- MYRAR.RAR *.EXE            无提示带路径提取MYRAR.RAR包含子目录中的所有文件到当前目录
RAR X -Y -C- MYRAR.RAR *.EXE -AD C:\01\ 无提示带路径释放MYRAR.RAR包含子目录中的所有文件到指定路C:\01目录中
RAR E -Y -C- MYRAR.RAR *.EXE -AD C:\01\ 无提示释放MYRAR.RAR包含子目录中的所有文件到指定路C:\01根目录中

[-开关]
这里列举几个重要的开关:

一.实现自动备份和还原
-AD,-AP,-EP3:中-AD表示压缩指定路径的文件到压缩包中或释放压缩包中的文件到指定路径中;-AP用于设置压缩文件的内部路径;-EP3表示包括盘符在内的完整路径.
ECHO 下面的例子备份SYSTEM目录中的文件并还原:
IF NOT EXIST F:\SYSBAK MD F:\SYSBAK
ECHO 备份指定文件夹下包含子目录的所有文件并带盘符的完整路径
RAR A F:\SYSBAK\BAK.RAR -AD -EP3 %windir%\SYSTEM
RAR X -Y -EP3 F:\SYSBAK\BAK.RAR
ECHO 下面的例子把当前目录中所有的压缩包文件解压到D盘DATA下
rar x -ad *.rar d:\data\
ECHO 下面的例子添加文件'readme.txt'到目录压缩文件myrar.rar的'DOCS\ENG'目录中
RAR A -AP DOCS\ENG MYRAR.RAR readme.txt

-sfx[WinCon.SFX|Default.SFX]:创建自解压文件,如果要创建DOS下的自解压请使用WinCon.SFX模块名,缺省为WIN32,另外注意的是二者之间绝对没有空格
ECHO 下面备份IME目录的文件为DOS下可执行的自解压包并还原
RAR A -DF -EP3 -SFXWINCON.SFX MYRAR %WINDIR%\IME
RAR X -Y -EP3 MYRAR.EXE

二.按照日期来备份
-AG[格式]:使用当前的日期和时间产生压缩文件名,格式可以为YYYYMMDDHHMMSS,另外可以使用一种特殊格式N来代表备份时产生自动数字序号,这个格式也可和日期格式组合;另外如果格式的第一个字符为+则会交换基本文件名和日期格式的位置;如果要保留格式字符可以使用{}括起来
RAR A -AGYYYYMM-NN MYBAK C:\BOOT               将产生诸如MYBAK200701-01,MYBAK200701-02的备份
RAR A -AG+YYYYMMN MYBAK C:\BOOT                将产生诸如20070101MYBAK,20070102MYBAK的备份
RAR A -AGyy{year}mm{month}nn MYBAK C:\BOOT     将产生诸如mybak07year01month01,mybak07year01month02的备份
RAR A -AGYYYWWA MYBAK C:\BOOT                  将产生2007043的备份(2007年第4周星期三)

三.加密备份和恢复解密
-p[p]:压缩时加密或解压时解密,密码区分大小写,如果要使压缩包中的某些文件不加密而有些加密,则可以分步操作即先添加不需要密码的到压缩包,再使用-P开关添加需要密码的文件,或反向操作,如RAR A -P123 MYBAK C:\BOOT;RAR A MYBAK README.TXT
-HP[P]:带文件头加密,这种加密方式更安全,用户没有密码无法查看里面的文件列表等信息.
-av:添加身份效检(创建者信息,最后更新时间和压缩文件名等)到压缩包中,只有注册版才有此功能,身份效检主要用于软件发布,如果要禁止身份效检或添加身份效检可以使用-av-开关

四.压缩模式和线程
-m<n>:设置压缩模式,从底到高压缩率越高:-m0不压缩方式储存;-m1最快;-m2较快;-m3标准(默认);-m4较好;-m5最好
-ms[文件列表]:指定不压缩而直接储存压缩,如一些已经压缩的文件如果在压缩也不能减少多少体积反而占用了大量时间,一起添加到压缩包中时可以使用这个开关(如果没有指定文件列表则忽略大多少压缩格式文件)避免再次压缩,如rar a -ms*.rar;*.zip
-s创建固实压缩以进一步提高压缩率,如RAR A -S MYRAR C:\BOOT -R;如果要禁止固实压缩则使用-S-开关;如果为了减少这种压缩方式的损坏率可以不要使用这个开关或可以改用-SN开关或-SE开关(如果是分卷压缩则使用-SV开关);
-v创建或查看分卷压缩,不使用其他变量则会根据目标媒体自动分卷,如果要查看分卷则最好和V或L命令一起使用以便查看从指定开始卷的所有内容,否则只显示指定卷内容;如果要指定分卷的大小可以使用-V<大小>[k|b|f|m|g|G]变量,其中f变量是预定义大小,如RAR A -S -V1440 FLOPRAR C:\BOOT,该开关可以多次使用以便为不同的卷设置不同大小,如RAR A -V100k -V200k -V300k MYRAR,分卷压缩可以和-sfx开关一起使用创建自解压分卷格式,另外该命令不可以和命令'd','f','u','s'一起使用,还有就是a命令不能用来更新分卷压缩文件而只能创建新的压缩文件.
-mt<线程>:可以提高压缩速度,变量在0-16之间,如果未指定则RAR自动根据CPU数量设置,仅使用于WIN版


五.屏蔽显示有关操作开关汇总
-y :-Y对于所有询问多回答是
-inul:禁止所有消息
-o-:不覆盖已经存在的文件
-o+:覆盖已经存在的文件
-or:存在同名文件时自动添加数字标识命名文件]
-id[c,d,p,q]:禁止版权消息,禁止完成消息,禁止完成百分比显示消息,安静模式除非有错误时才提示(几个开关可以合并使用,但-IDQ可以代替其他几个参数),如RAR A -IDCD MYRAR C:\TEMP仅显示完成百分比
-c-:禁止显示注释
-cfg-:忽略配置文件和RAR环境变量
-cl:转换文件名为大写字母
-cu:转换文件名为小写字母

六.有关目录开关和排除开关汇总
-ED,-EP,-EP1,-EP3:-ED排除空目录;-EP排除所有目录名但不排除里面的文件(排除后如果路径中有同名文件将会在压缩包中看到很多同名文件)如把C:\TEMP下包含子目录的文件全部压缩到MYRAR.RAR根目录RAR A -EP MYRAR.RAR C:\TEMP;-EP1彻底排除所有的路径名称(本人用这个命令好象没有任何效果);-EP3包含磁盘的完整路径,这个开关在压缩包里磁盘显示为_如C_,使用命令是可还原为C:的样式,常用来备份和恢复系统
-R,-R0:都是包含子文件夹,可以和很多命令如A,U,F,M,X,E,T,P,V,L,C,CF,S等一起使用(前四个命令将处理工作目录和所有子目录的文件,其他命令则处理工作目录及目录的压缩文件),但是有所不同的是前者和A,U,F,M命令一起使用时不能和通配符*和?搭配,而后者可以.另外注意RAR命令还以目录是否带有\来区分是否包含目录的文件,如果有\则不包含子目录.
-n<文件>,-x<文件>:前者仅包含指定的文件(如果使用文件列表则使用-n@<文件列表>命令),后者则要排除的指定文件(如果使用文件列表则使用-x@<文件列表>命令),都可以使用通配符,都可以多次使用该开关.如:rar a -r -n*.txt -n*.lst myrar c:\Project c:\Info实际是未简化的rar a -r myrar c:\Project\*.txt c:\Project\*.lst c:Info\*.txt c:\Info\*.lst命令;rar a -r -x*\temp -x*\temp\* savec c:\* 该命令将压缩C盘上除了TEMP文件夹目录及其里面所有文件,注意的是因为-x开关不能递归子目录,所以只有使用两次才能生效;rar x -x*.txt docs该命令从DOCS.RAR解压时把*.txt排除;
-e[+]<属性>:该命令排除(默认)或包含(使用+标记)指定掩码属性文件,属性可使用WIN版本的DSHA分别代表目录和文件的系统,隐藏和只读属性,如不压缩系统盘根目录的系统或隐藏属性的文件:rar a -esh myrar c:\;压缩系统盘所有的目录(不包含文件):rar a -r -e+d mydirs c:\

七.其他有用参数:
-ioff:在完成操作后关闭计算机,需要硬件必须支持断电功能且只有在Win32 版本可用.
-ieml[.][地址1;地址2;...]:如果发了email后要删除压缩包可以添加.到EMAIL地址,如rar a [email]-ieml.xbd@sina.com[/email] mybak c:\boot,这个很容易被病毒利用.


所有开关及及其简易说明:
  ac            压缩或解压后清除存档属性
  ad            添加压缩文件名到目标路径
  ag[格式]      使用当前日期生成压缩文件名
  ao            添加具有压缩属性的文件
  ap<格式>      添加路径到压缩文件中
  as            同步压缩文件内容
  av            添加用户身份校验(仅注册版本可用)
  av-           禁用用户身份校验
  c-            禁用注释显示
  cfg-          禁用读取配置
  cl            名称转换为小写
  cu            名称转换为大写
  df            压缩后删除文件
  dh            打开共享文件
  ds            对固实压缩文件禁用名称排序
  e[+]<属性>    设置文件排除和包括属性
  ed            不添加空目录
  en            不添加"压缩文件结束"标志
  ep            从名称中排除路径
  ep1           从名称中排除基本目录
  ep2           展开为完整路径
  ep3           扩展路径为包含盘符的完全路径
  f             刷新文件
  hp[密码]      同时加密文件数据和文件头
  id[c,d,p,q]   禁用消息
  ieml[地址]    用 E-mail 发送压缩文件
  ierr          发送所有消息到标准错误设备
  ilog[名称]    把错误写到日志文件(只有注册版本可用)
  inul          禁用所有消息
  ioff          完成一个操作后关闭 PC 电源
  isnd          启用声音
  k             锁定压缩文件
  kb            保留损坏的已解压文件
  m<0..5>       设置压缩级别(0-存储...3-默认...5-最大)
  mc<参数>      设置高级压缩参数
  md<大小>      以KB为单位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
  ms[ext;ext]   指定存储的文件类型
  mt<线程>      设置线程数
  n<文件>       仅包含指定的文件
  n@            从标准输入设备读取文件名到包括
  n@<列表>      在指定的文件列表包括文件
  o+            覆盖已存在文件
  o-            不覆盖已存在文件
  oc            设置 NTFS 压缩属性
  or            自动重命名文件
  os            保存 NTFS 流
  ow            保存或恢复文件所有者和组
  p[密码]       设置密码
  p-            不询问密码
  r             递归子目录
  r0            仅递归通配符名称的子目录
  ri<P>[:<S>]   设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间
  rr[N]         添加数据恢复记录
  rv[N]         创建恢复卷
  s[<N>,v[-],e] 创建固实压缩文件
  s-            禁用固实压缩文件
  sc<chr><obj>  指定字符集
  sfx[名称]     创建自解压压缩文件
  st[名称]      从标准输入设备读取数据(stdin)
  sl<大小>      处理小于指定大小的文件
  sm<大小>      处理超过指定大小的文件
  t             压缩后测试文件
  ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
  tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
  tk            保留原始压缩文件时间
  tl            设置压缩文件时间为最新文件时间
  tn<时间>      添加 <时间> 以后的文件
  to<时间>      添加 <时间> 以前的文件
  ts<m,c,a>[N]  保存或恢复文件时间(修改,创建,访问)
  u             更新文件
  v             自动检测创建卷的大小或者列出所有的卷
  v<大小>[k,b]  创建卷大小=<大小>*1000 [*1024, *1]
  vd            创建容量前清除磁盘内容
  ver[n]        文件版本控制
  vn            使用旧风格的卷命名方案
  vp            每卷之前暂停
  w<路径>       指定工作目录
  x<文件>       排除指定的文件
  x@            从标准输入设备读取要排除的文件名
  x@<列表>      排除指定列表文件中的文件
  y             假设对全部询问都回答是
  z[文件]       从文件读取压缩文件注释


[ 本帖最后由 Batcher 于 2009-3-1 14:21 编辑 ]
作者: hanyeguxing    时间: 2010-5-7 12:02

  1. @echo off&setlocal enabledelayedexpansion
  2. md "解压后\"
  3. set "r=C:\Program Files\WinRAR\rar.exe"
  4. for %%a in (*.rar) do (set a=-1
  5. "%r%" x -inul -or -y "%%a" tmp\
  6. for /f "delims=" %%b in ('dir /a-d/b/s "tmp\"') do (set/a a+=1
  7. if !a!==0 (set n=) else set n=!a!
  8. move "%%b" "解压后\%%~na!n!%%~xb"))
  9. rd /s/q tmp
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-7 12:08 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2