Board logo

标题: [文本处理] 批处理搜集所有盘符中特定文件并进行压缩,代码写好了,如何改进? [打印本页]

作者: pplive517    时间: 2011-9-1 17:10     标题: 批处理搜集所有盘符中特定文件并进行压缩,代码写好了,如何改进?

我的目的是把盘符中所有特定非英文和数字组合名字的*.doc文件进行搜集到特定文件夹下,并进行压缩,总感觉效率不高,有没有好的方法改进,有不足支持请多多指教,谢谢了O(∩_∩)O~:
  1. @echo off&setlocal enabledelayedexpansion
  2. title 复制文件
  3. color 07
  4. ::创建文件夹
  5. Md f:\word 2>nul
  6. ::对各盘符特定文件查找,对文件名进行匹配,合适文件进行复制
  7. for %%i in (c d e f g) do (
  8. For /f "delims=" %%j in ('dir /s /b "%%i:\*.xls" "%%i:\*.doc"') do (
  9. set file=%%~nj
  10. set file=!file:*_=!
  11. echo !file!|findstr /ibe "[0-9,a-z,A-Z]*">nul&&echo 无中文||Copy /y "%%j" f:\word
  12. )
  13. )
  14. )
  15. ::获取winrar的完全路径。
  16. For /f skip^=2^ tokens^=2^ delims^=^"  %%i in ('Reg Query "HKEY_CLASSES_ROOT\Applications\WinRAR.exe\shell\open\command" /ve') do Set winrar=%%i
  17. ::获取rar.exe的完全路径
  18. Set rarpath=%winrar:winrar.exe=rar.exe%
  19. ::修改此处执行rar命令
  20. "%rarpath%" a "f:\2" "f:\word"
  21. ::删除当前文件夹,擦出痕迹
  22. ::rd/s/q f:\word
  23. ::运行完自动退出
  24. pause>nul
  25. exit
复制代码

作者: hfg1977    时间: 2011-9-1 17:59

指出几点:
1. 全盘搜索面对现在一个分区都在100G以上的硬盘, 是非常耗时,且损耗资源的行为,也有损硬盘设备.对于SSD也是.
   除非是单位的机子一般自己的机子不会不知道文件位置.
2.RAR文件的打包并不需要那个copy一遍再打包再删除的过程.
   可以使用文件列表的形式进行直接打包. 如下示例:
  1. rar u -m5 -inul -ep1 -ed "%~dp1.\%~n1.rar" @"%~dp0.\filelist.txt"
复制代码

3. 个人认为7z的压缩率比rar高.
  1. 7za a -mx=9 -scsWIN "%~dp1.\%~n1.rar" @"%~dp0.\filelist.txt"
复制代码

作者: pplive517    时间: 2011-9-1 20:09

回复 2# hfg1977


    如果是7z的话,需要机子安装7z的软件,针对大多数机子都安装winrar,所以选择了rar压缩》
作者: hfg1977    时间: 2011-9-2 05:36

测试了一下,RAR路径获取错误

修正:
  1. ::获取winrar安装路径,设置rar绝对路径
  2. For /f "skip=4 tokens=3"  %%i in ('Reg Query "HKCR\Applications\WinRAR.exe\shell\open\command" /ve') do (
  3. echo.%%~i&Set rar_exe=%%~dpi.\rar.exe&call echo.%%rar_exe%%
  4. )
复制代码

作者: CrLf    时间: 2011-9-2 08:32

回复 4# hfg1977

ftype rarfile 更方便
作者: hfg1977    时间: 2011-9-2 10:39

RES
我的注册表中并没有 "rarfile" 文件类型, 只是在 ".rar" 中进行注册.
作者: CrLf    时间: 2011-9-2 11:28

回复 6# hfg1977


    哦,应该是
  1. ftype winrar
复制代码

作者: pplive517    时间: 2011-9-5 15:13

回复 4# hfg1977


    不会吧,我的可以正常通过,换用的代码反而出错,无法解压,winrar安装的路径和系统的版本也能影响其在注册表的位置吗,
如何才能在各个版本系统和不知道安装路径的时候均能正常工作呢?
作者: Hello123World    时间: 2011-9-5 15:17

嘿嘿,我在百度知道的回答……
作者: hfg1977    时间: 2011-9-5 17:25

回复 8# pplive517

  1. E:\DOS>reg Query "HKCR\Applications\WinRAR.exe\shell\open\command" /ve
  2. ! REG.EXE VERSION 3.0
  3. HKEY_CLASSES_ROOT\Applications\WinRAR.exe\shell\open\command
  4.     <没有名称>  REG_SZ  "E:\RUANJIAN\winrar3.9\WinRAR.exe" "%1"
  5. E:\DOS>
复制代码

winXP sp3




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