Board logo

标题: for 调用winrar批量生成压缩文件 大家帮忙看看 [打印本页]

作者: txtrain     时间: 2007-2-6 23:02    标题: for 调用winrar批量生成压缩文件 大家帮忙看看

目的是这样的:
我当前目录下有好多文件夹,里面分别放着不同的文件夹和文件,大小几M到几百M不等.我就想以当前目录为基准,进入目录,压缩,做成自解压包,删除压缩包,退出文件夹,如此这样徇环,直到把所有的文件夹都压缩完.其中关于调用winrar的环境变量以及相关的winrar参数(因为设置针对图形界面生效,所以必须调用winrar来完成)已经设置完毕,直接调用就可以了.我是这样写的:for /f %a in ('dir /b') do cd %a &winrar a -r x:\%a.rar&winrar s x:\%a.rar&del x:\%a.rar&cd ..就这样.但是在实际执行的过程中,第二个winrar命令不等第一个执行完就执行!因为工作量非常大,所以实在苦恼.请大家支个招.我已经反复实验过N遍了.用echo语句生成批处理肯定好使,但是我想更进一步,直接一条命令完事,高手指教.谢谢!

[ Last edited by txtrain on 2007-2-6 at 10:15 AM ]
作者: redtek     时间: 2007-2-6 23:22
换成 WinRAR 目录下的 RAR.EXE 来加参数压缩(命令行界面)。

这样兄在执行压缩任务的时候 RAR.exe 是当前任务完成后,后面的命令才会执行,这样就可以正常进行先压缩再执行转换的工作了~:)




“其中关于调用winrar的环境变量以及相关的winrar参数(因为设置针对图形界面生效,所以必须调用winrar来完成)”,

把 rar.exe 文件拷贝到Windows目录内(因环境变量已含有Windows路径),这样就可以在任何地方直接调用 RAR.EXE 了:)

(这样可以省去手工添加 rar.exe 所在路径的设置)

[ Last edited by redtek on 2007-2-6 at 10:44 AM ]
作者: txtrain     时间: 2007-2-6 23:51
以前试过用rar肯定没有问题,但是winrar有个参数叫"压缩方式":最好:我需要这一项,好像在rar没有找到这个参数哟
作者: redtek     时间: 2007-2-7 00:00
m<0..5>       设置压缩等级 (0-存储...3-默认...5-最大)


rar a /r /m5 .....  M5参数是最大比率压缩:)
作者: txtrain     时间: 2007-2-7 00:06
那么winrar里面的压缩方式最好是,0呢,还是5呢,想不明白
作者: redtek     时间: 2007-2-7 00:13
Winrar 加 /m5 参数是最大压缩比:)

分别用 winrar a /r /m5 ...  和  Winrar a /r /m0  ...  对比压缩同一目录,它们相差很多, 加/m5 参数的压缩比最大:)

[ Last edited by redtek on 2007-2-6 at 11:14 AM ]
作者: txtrain     时间: 2007-2-7 00:15
也就是说0是压缩最好了?其实你用winrar直接设置就成了,还加什么参数?
我之所以一直想直接调winrar就因为直接设置好了.不用加参数

[ Last edited by txtrain on 2007-2-6 at 11:16 AM ]
作者: redtek     时间: 2007-2-7 00:23
WinRAR  (/M5 参数可以最大化压缩,把文件压缩到尽可能的最小:)

调用 WinRAR 确实不错~:)
不过我喜欢命令行,不太喜欢图形界面(主要是打字速度快,哈哈)
作者: txtrain     时间: 2007-2-7 00:29
我要疯了,redtek你有没有环境自己试验一下
for /l %a in (1,1,9) do @echo %a >>%a.txt
for /l %a in (1,1,9) do mkdir %a
for /l %a in (1,1,9) do move %a.txt %a\
然后再给那几个目录里再拷点其它的文件夹和文件,压缩一下试试

for /f %a in ('dir /b') do cd %a&&rar a /r x:\%a.rar&&winrar s x:\%a.rar&&del x:\%a.rar&&cd ..
你自己看下是什么结果吧


一直忘记说了,我的测试环境是xp sp2

winrar版本:
RAR 3.50 beta 3   版权所有 (c) 1993-2005 Alexander Roshal   22 Apr 2005
注册给 - Internet -

[ Last edited by txtrain on 2007-2-6 at 11:37 AM ]
作者: redtek     时间: 2007-2-7 00:47
压缩 NOTEPAD.EXE 记事本测试:
C:\WINDOWS>dir notepad.exe
驱动器 C 中的卷是 DISK-C
卷的序列号是 4089-CA39

C:\WINDOWS 的目录

2003-03-27  20:00            65,536 NOTEPAD.EXE
               1 个文件         65,536 字节
               0 个目录  3,117,764,608 可用字节

C:\WINDOWS>winrar a /m5 n1 notepad.exe

C:\WINDOWS>winrar a /m0 n2 notepad.exe

C:\WINDOWS>dir n?.rar
驱动器 C 中的卷是 DISK-C
卷的序列号是 4089-CA39

C:\WINDOWS 的目录

2007-02-06  11:48            34,459 n1.rar
2007-02-06  11:48            65,606 n2.rar
               2 个文件        100,065 字节
               0 个目录  3,117,658,112 可用字节
2007-02-06  11:48            34,459 n1.rar  (这个是 /M5 压缩的,最好)
2007-02-06  11:48            65,606 n2.rar (这个是 /M0 压缩的)


WRAR 3.0 未注册版
系统:

名称:     WindowsServer 2003, Enterprise Edition
版本:     5.2 内部版本 3790

[ Last edited by redtek on 2007-2-6 at 11:49 AM ]
作者: vkill     时间: 2007-2-7 00:51
我喜欢命令行下的 7z
作者: anqing     时间: 2007-2-7 01:01
帮你顶上去吧,我也想弄明白,你的问题?
作者: txtrain     时间: 2007-2-7 02:16
我想我的问题确切的说是,连续调用两个外部命令,后一个不能等前一个执行完再执行
作者: redtek     时间: 2007-2-7 02:33


  Quote:
Originally posted by txtrain at 2007-2-6 13:16:
我想我的问题确切的说是,连续调用两个外部命令,后一个不能等前一个执行完再执行

不好意思,刚才只注意探讨压缩比率了,忘了走题了:)
Start  /w   WinRAR.exe  a  /r ...... 压缩命令……
这样,只有 WinRAR 压缩任务运行完以后才会继续向下执行以下的命令:)

兄可将压缩的命令与转换 .rar 文件为自解压的命令分开两行写,不用 & 来连接它们为一行,这样 Start /w 参数就可以让它们执行完一个再执行一个,而不是并发方式的执行:)


即:
Start   /w    第一个命令
Start   /w    第二个命令
这样第一个命令执行完以后,第二个命令才会被执行:)


不会是我又看走题了吧? 上面是后一个命令等前一个命令执行完以后再执行:)


兄所说 “连续调用两个外部命令,后一个不能等前一个执行完再执行” ,后一个不等前一个命令执行完再执行就是说:并发运行对吧?

Start   第一个命令
Start   第二个命令

[ Last edited by redtek on 2007-2-6 at 01:38 PM ]
作者: txtrain     时间: 2007-2-7 02:39
我可以很负责任的告诉你,试过了,不行


晕了,又试了一次行了,看来我的实际工夫还是做的不到位,谢谢了!!!

[ Last edited by txtrain on 2007-2-6 at 01:53 PM ]
作者: redtek     时间: 2007-2-7 03:36
兄别着急,我在我这里正在测试(怕万一出个错误删掉兄的文件可麻烦了:),有更短的命令可以完成,一会我发上来:)
作者: qingfushuan     时间: 2007-2-7 03:41    标题: 我试了试

我试了试:
for /f %%a in ('dir /b /s') do rar a /r /sfx %%a "%%a"

好像可以满足要求,但是得把rar.exe和Default.SFX放在一块,直接就是自解压文件

希望对你有帮助
作者: redtek     时间: 2007-2-7 03:49
回txtrain兄:

执行下面命令前(一劳永逸)需要设置初始值:

1)给 Winrar.exe 所在的目录设置路径,让系统可以找得到。
  如果觉得麻烦,可以将 WinRAr.exe 拷贝到 Windows 目录内,这样省去了手工设置路径的麻烦:)


2)将 \Program Files\WinRAR\ 目录内的 Default.SFX 这个文件拷贝到 Windows 目录内。
  这是 Winrar 或 RAR 在压缩自解压文件时所要读取的一个“字典”文件,如果不将其拷贝到已设置好的路径中,则压缩时找不到,也就压缩不了。

  拷贝了这个文件到 Windows 目录内,以后就可以一个压缩命令一步完成 .exe 自解压文件的建立。



命令行直接键入:
for /f %i in ('dir /b /ad') do winrar a /r /m5 /sfx "e:\bak\%i.exe" "%i"
将当前目录下的 下一级目录以及在内的所有文件 压缩成自解压(.EXE)格式,并将压缩成的 .exe 文件存到 E:\BAK 目录中。


DIR /AD   是只列目录,滤掉文件。
如果只有 dir /b 的话,则会连文件与目录名全都被 for 枚举出来。

我在%i 参数以及操作时均加有双引号,这样当遇到含有空格的目录名时照样可以工作,而不会出错。
如果不加双引号,则遇含有空格的文件名时又正遇到 MD 或 RD 等危险命令时很可能会发生意想不到的意外……



我这里通过测试:)
版本: RAR 3.0 未注册版,Windows 2003

[ Last edited by redtek on 2007-2-6 at 02:52 PM ]
作者: redtek     时间: 2007-2-7 03:51
非常感谢qingfushuan兄指点~:)))
作者: qingfushuan     时间: 2007-2-7 04:25    标题: 呵呵

我还是菜鸟的哈,从无忧泡到联盟就是想学习for的哦,谢谢LZ提供感兴趣的题材

实际上LZ已经完成了的,只是没用rar /? 咨询罢了,不敢窃天之功啊,我的关机脚本

就有:start c:\Progra~1\WinRAR\rar.exe a /r /s /m1 f:\mybackup\bak\%date%.rar f:\mybackup\backup 这一句,因而熟悉点

[ Last edited by qingfushuan on 2007-2-6 at 03:29 PM ]
作者: redtek     时间: 2007-2-7 04:38
qingfushuan兄客气啦:)
我在眼里没菜鸟,每个人都有数不尽可以学习的地方~:)))
作者: txtrain     时间: 2007-2-7 06:23    标题: 感谢二位大哥

刚好,小弟最后那一帖子在十五楼,没看到 还有第二页不好意思.感谢你们为我这个问题所花费的时间.这是无价的.但是不完美的地方是E:\temp>for /f %a in ('dir /b /ad') do winrar a /r /sfx /m5 "e:\temp\%a.exe" "%a
"这一句一执行,会同时打开N个压缩文件进行压缩,试想一下,如果N够大的话.肯定会机器垮掉,而且有可能因为机器过忙压缩好的文件会出现压缩错误的情况

不捉迷藏了,这样就可以解决了.
for /f %a in ('dir /b /ad') do start /w winrar /a /r /sfx /m5 "e:\temp\%a.exe" "%a"


还有为了分享,我告诉大家一点经验.有时候压缩大文件的时候,可能会出现CRC失败之类的信息,这个时候压缩的时候选择压缩方式"最好"."创建固实压缩"一般可以解决问题.如果还是不能解决,呵呵,换个服务器版本的操作系统试试,这是小弟郁闷很久后的一点心得,拿出来省的大家再走弯路.

还有一点要求讲解的是,为什么那个for 语句最后面还要再跟一个"%a"呢?

[ Last edited by txtrain on 2007-2-6 at 05:43 PM ]
作者: redtek     时间: 2007-2-7 07:15
有了qingfushuan兄和txtrain兄对WinRAR的经验之谈,以后网友再解决一些关于压缩方面的问题看此帖参考相关内容就再方便不过啦~:)
 
 
 
 
 
 
 
【 正文检索主题词: RAR    WINRAR    压缩    压缩文件    压缩目录    Default.SFX    /W   /WAIT  】

[ Last edited by redtek on 2007-2-6 at 06:21 PM ]
作者: redtek     时间: 2007-2-7 07:23


  Quote:
Originally posted by txtrain at 2007-2-6 17:23:
有时候压缩大文件的时候,可能会出现CRC失败之类的信息,这个时候压缩的时候选择压缩方式"最好"."创建固实压缩"一般可以解决问题

欣赏txtrain兄经验之谈,学习了~:)
收藏~:)

[ Last edited by redtek on 2007-2-6 at 06:24 PM ]