Board logo

标题: [已解决]批处理怎样一次压缩多个文件夹内的文件? [打印本页]

作者: tk1266    时间: 2011-7-29 16:52     标题: [已解决]批处理怎样一次压缩多个文件夹内的文件?

本帖最后由 tk1266 于 2012-1-14 16:17 编辑

有几千个文件夹,每个文件夹内有若干个文件,怎样一次批量压缩完所有文件,每个文件放到一个单独的压缩文件中.
压缩后用原文件名命名
压缩后删除原文件.

thanks.
作者: CUer    时间: 2011-7-29 20:34

  1. @echo off
  2. set "rar=C:\Program Files\WinRAR\rar.exe"
  3. for /r "C:\Test\" %%a in (*.txt) do (
  4.     "%rar%" a -df "%%~dpa%%~na.rar" "%%a"
  5. )
复制代码

作者: 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