标题: [已解决]批处理怎样一次压缩多个文件夹内的文件? [打印本页]
作者: tk1266 时间: 2011-7-29 16:52 标题: [已解决]批处理怎样一次压缩多个文件夹内的文件?
本帖最后由 tk1266 于 2012-1-14 16:17 编辑
有几千个文件夹,每个文件夹内有若干个文件,怎样一次批量压缩完所有文件,每个文件放到一个单独的压缩文件中.
压缩后用原文件名命名
压缩后删除原文件.
thanks.
作者: CUer 时间: 2011-7-29 20:34
- @echo off
- set "rar=C:\Program Files\WinRAR\rar.exe"
- for /r "C:\Test\" %%a in (*.txt) do (
- "%rar%" a -df "%%~dpa%%~na.rar" "%%a"
- )
复制代码
作者: tk1266 时间: 2011-7-30 08:26
谢谢. 昨晚10点.
第一次用10个文件夹测试成功.
第二次测试300个文件夹,每个文件夹120个文件,每个文件1KB.等了三个小时,还没处理完,后来睡着了.今早起来一看,BAT界面卡住了, 点关闭, 约30秒后界面才消失. 电脑疑似死机, 出现“系统资源不足,无法完成请求的服务”, 无法关机, 最后强制关机。
第一次都成功了,我想第二次,测试多点。。。呵呵
测试环境:XP SP2 双核2.1G 2G 350G
作者: CUer 时间: 2011-7-30 10:55
回复 3# tk1266
哪个版本的WinRAR?
作者: tk1266 时间: 2011-7-30 11:13
本帖最后由 tk1266 于 2011-7-30 11:14 编辑
回复 tk1266
哪个版本的WinRAR?
CUer 发表于 2011-7-30 10:55
版本可能低了点: 3.70.0.0
请教:
1.能不能提高效率?
2.采用存储方式是不是可以大幅提高速度?
3.能不能不在代码里写入路径及目标文件格式?
谢谢.
作者: CUer 时间: 2011-7-30 11:16
回复 5# tk1266
怀疑是太频繁的调用rar.exe造成的,你先换个4.0版本的试试?不行我们再一起想办法
作者: tk1266 时间: 2011-7-30 11:37
回复 tk1266
怀疑是太频繁的调用rar.exe造成的,你先换个4.0版本的试试?不行我们再一起想办法
CUer 发表于 2011-7-30 11:16
已升级到4.1版本,用少量(几个)文件夹测试是正常的,但效率还是不高.
作者: CUer 时间: 2011-7-30 11:43
回复 5# tk1266
把*.txt改成*.*
路径是指哪个路径?如果要把所有文件压缩之后放在当前目录,可以把%%~dpa删掉。
作者: cjiabing 时间: 2011-7-30 11:47
“系统资源不足,无法完成请求的服务”——这个和程序代码正确与否没有关系呢,可能你的操纵的文件太多了,耗费太多资源了。可以压缩分部分来压缩,不要一次压缩太多。
作者: tk1266 时间: 2011-7-30 12:01
回复 tk1266
把*.txt改成*.*
路径是指哪个路径?如果要把所有文件压缩之后放在当前目录,可以把%%~ ...
CUer 发表于 2011-7-30 11:43
我说的路径是指这个 C:\Test\
BAT放在目标文件夹同一级目录, 如果每次都要设置C:\Test\然后存为新的BAT,多了一个不必要的步骤.
作者: tk1266 时间: 2011-7-30 12:04
“系统资源不足,无法完成请求的服务”——这个和程序代码正确与否没有关系呢,可能你的操纵的文件太多了, ...
cjiabing 发表于 2011-7-30 11:47
“系统资源不足,无法完成请求的服务”——是在BAT界面卡住时, 我点其他 图标后 弹出来的.
每个文件1KB, 我手动压缩12200个用了11分钟, 包括压缩及删除原文件. 其中删除费时最长.
但用BAT处理远远超过了10分钟.
作者: CUer 时间: 2011-7-30 12:30
回复 10# tk1266
把"C:\test\"删掉
作者: CUer 时间: 2011-7-30 12:32
回复 11# tk1266
手工是把12200个文件压缩之后放到同一个rar文件里面吗?
作者: tk1266 时间: 2011-7-30 12:38
回复 tk1266
手工是把12200个文件压缩之后放到同一个rar文件里面吗?
CUer 发表于 2011-7-30 12:32
同一个文件夹 ,每个文件压缩成独立的。
作者: tk1266 时间: 2011-7-30 12:40
每个文件1KB, 我把12200个样本文件放在 123个 文件夹中, 每个文件夹100个文件。
执行BAT,
关闭防火墙,杀软 以及360, 速度会更快,耗时约20分钟。
作者: tk1266 时间: 2011-7-30 12:44
但我觉得效率都低了点, 希望有更高的效率,谢谢。
作者: CUer 时间: 2011-7-30 12:55
回复 15# tk1266
哦,你是手工压缩时,在WinRAR里面勾选了“把每个文件放到单独的压缩文件中”对吧?
命令行版本里面暂时没看到这样的选项,我再找找。
作者: tk1266 时间: 2011-7-30 13:06
回复 tk1266
哦,你是手工压缩时,在WinRAR里面勾选了“把每个文件放到单独的压缩文件中”对吧?
命 ...
CUer 发表于 2011-7-30 12:55
是的,勾选了的.
因为每个样本文件只有1KB, 压缩过程速度较快, 压缩耗时约3分钟.
由于12200个文件放在同一个文件夹, 比较费时的是 打开文件夹 和 选定所有文件 以及 删除原文件 这三个过程.
作者: tk1266 时间: 2011-7-30 13:10
另外,手工压缩时, 速度好象与杀软 防火墙无明显关系.
但执行BAT时, 关闭杀软防火墙后, 速度明显快了很多.
还有,为了避免 频繁调用rar.exe, 是不是可以考虑延时的思路? 比如 每压缩1000个延时1S, 或每压缩完一个文件夹延时1S.
谢谢.
作者: cjiabing 时间: 2011-7-31 11:12
本帖最后由 cjiabing 于 2011-7-31 11:16 编辑
回复 11# tk1266
人工做的时候是有选择、有间隔的,但机器做的时候方式方法可能不一样,它有可能把所有文件都搬到内存去了,然后一个个的压缩。这种情况在解压缩安装系统的时候是很明显的,你总感觉一个一个的解压比一下子将一个大文件解压的速度要快些,特别是写入优盘等情况。更准确的说法期待其他大侠解释。
但从这个问题我们应当发现,单纯一个命令不是万能的,遇到问题,而自动识别和处理问题,这才是批处理要做的工作。而你还没有办法让你的批处理更加聪明,只是喜欢纠缠于此,仅此而已。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |