[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
下班了,仅想了下流程,提供部分关键代码。下次再上完整的。A1-C1为文本文件.

A1 完全相同,A2新旧不同,A3路径不同但文件相同,B1 疑似相同文件,C1完全不同文件, EOF 指推出判断,也可以输出C1


1 for /r A目录文件,IF EXIST 检查B目录文件,|-有相对位置同名文件存在,则FC对比 |-相同就输出到文本A1(完全相同)
                                            |                                                                                                       |-不同则输出到文本A2(新旧版本)
                                            |_无同名文件 |- 检查目录树   |- 有名字相同 |- size相等,FC,输出A3(路径不同文件相同),否者完全不同,eof
                                                                          |             |- size差距大 eof
                                                                          |             |- size差10%以内,输出B1文本(可能为新旧版本,提交用户选择)
                                                                          |- 无名字相同,但有SIZE相等的,则FC |- 相同则输出A3文本(路径不同)
                                                                                                              |- 不同则eof

2 处理B1列表,让用户选择那些是相同文件,那些是不同文件,分储到A3跟C1。
  处理 A2 列表,旧的更名OLD_ ;
  处理A3列表。

3 A->B 拷贝,忽略存在目标, B->A 拷贝,忽略存在文件。


1, 取得FC结果, FC FILE1 FILE2 && echo 两个文件完全相同
2, 查找SIZE相等的文件,for /r ........do dir /s /-c /b /a:-d |find "%~zi" && echo 找到SIZE相同的文件
3, 检查SIZE差距很小的,我尝试用正则 findstr "%var:~0,-2[0-9][0-9]" ,但是不准确
4, 处理列表,复制,XCOPY可以做大部分,另一部分需要IF EXIST来判断

TOP

做了部分代码,也只测试了前面部分,原来有考虑空格“”问题,但发现问题太多了,索性放弃,目录及文件名最好还是不要出现空格...
  1. @echo off
  2. SETLOCAL ENABLEEXTENSIONS
  3. SETLOCAL ENABLEDELAYEDEXPANSION
  4. set "a_dir=d:\test\a\"
  5. set "b_dir=d:\test\b\"
  6. for /r %a_dir% %%a in (*.h) do call :exist %%a
  7. pause
  8. goto :eof
  9. ;检测同位置文件
  10. :exist
  11. set xd_dir=%*
  12. set xd_dir=!xd_dir:%a_dir%=!
  13. if exist %b_dir%!xd_dir! (
  14.       echo %a_dir%!xd_dir!#%b_dir%!xd_dir! >A1.txt
  15.       ) else (
  16.       call :find %*
  17.    )
  18. goto :eof
  19. ;查找其他目录文件
  20. :find
  21. set fn=%~nx1
  22. dir %b_dir% /s /b !fn! |findstr /v "%1" >temp.txt
  23. if %ERRORLEVEL% EQU 0 (
  24.       ;有不同路径的同名文件
  25.       for /f %%b in (temp.txt) do call :cksize %* %%b
  26.       )else(
  27.       call :findsx
  28.     )
  29. goto :eof
  30. ;对比SIZE大小   
  31. :cksize
  32. if %~z1 EQU %~z2 (
  33.       call :fc %1 %2
  34.       )else
  35.       call :cksx %1 %2
  36.     )
  37. goto :eof
  38. :fc
  39. ;如果目录里大多是网站程序这种文本文件,修改FC参数,可达到较高识别率。
  40. fc %1 %2
  41. if %ERRORLEVEL% EQU 0 (
  42.       ;相同
  43.       echo %1#%2 >A3.txt
  44.       )else(
  45.      ;名字相同,路径不同,SIZE同,FC不同,稍后对比版本时间
  46.      )
  47. goto :eof
  48. :cksx
  49. ;对比属性,主要对比时间,作者,版本,公司等。
  50. goto :eof
  51. :findsx
  52. ;这里搜不到同名文件,的后续步骤,寻找属性接近的文件
  53. ;第一步是搜索SIZE相等的文件。
  54. ;然后搜索其它属性。
  55. ;但属性多的话,需要一段程序将文件属性対映到
复制代码

[ 本帖最后由 caruko 于 2010-3-24 13:46 编辑 ]

TOP

=.= 这是一个测试过的版本,目前只有2个功能,列出“完全相同”“以及同名但不同路径的文件”
  1. ;@echo off
  2. SETLOCAL ENABLEEXTENSIONS
  3. SETLOCAL ENABLEDELAYEDEXPANSION
  4. set "a_dir=d:\test\a\"
  5. set "b_dir=d:\test\b\"
  6. echo 这里保存“同名不同路径”的文件列表 >d:\A3.txt
  7. echo 这里保存“疑似同一功能文件”的文件列表 >d:\B1.txt
  8. echo 这里保存“完全相同”的文件列表 >d:\A1.txt
  9. pushd %b_dir%
  10. for /r %a_dir% %%a in (*.*) do call :exist %%a
  11. pause
  12. goto :eof
  13. ;检测同位置文件
  14. :exist
  15. set xd_dir=%*
  16. set xd_dir=!xd_dir:%a_dir%=!
  17. if exist %b_dir%!xd_dir! (
  18.       echo %* # %b_dir%!xd_dir! >>d:\A1.txt
  19.       ;同位置同名文件,放弃检测,也可调用FC对比,或者对比日期
  20.       ) else (
  21.       call :find %*
  22.    )
  23. goto :eof
  24. ;查找其他目录文件
  25. :find
  26. set fn=%~nx1
  27. dir /a:-d /s /b !fn! |findstr /v "%1" >d:\temp.txt
  28. if %ERRORLEVEL% EQU 0 (
  29.       for /f "tokens=1*" %%b in (d:\temp.txt) do call :cksize %1 %%b
  30.       goto :eof
  31.       )
  32. ;这里是无同名文件的代码
  33. goto :eof
  34. ;对比SIZE大小   
  35. :cksize
  36. if %~z1 equ %~z2 (
  37.       call :fc %1 %2
  38.       goto :eof
  39.       )
  40. call :cksx %1 %2
  41. goto :eof
  42. ;如果目录里大多是网站程序这种文本文件,修改FC参数,可达到较高识别率。
  43. :fc
  44. fc %1 %2
  45. echo fc %~nx1 %~nx2 >>r.txt
  46. if %ERRORLEVEL% EQU 0 (
  47.       echo %1 # %2 >>d:\A3.txt
  48.       goto :eof
  49.       )
  50. ;名字相同,路径不同,SIZE同,FC不同,稍后对比版本时间,或者第三方取得摘要信息
  51. goto :eof
  52. :cksx
  53. ;对比属性,主要对比时间,作者,版本,公司等。
  54. goto :eof
  55. :findsx
  56. ;这里搜不到同名文件,的后续步骤,寻找属性接近的文件
  57. ;第一步是搜索SIZE相等的文件。
  58. ;然后搜索其它属性。
  59. ;但属性多的话,需要一段程序将文件属性対映到
  60. goto :eof
复制代码
1

评分人数

TOP

返回列表