Board logo

标题: [文件操作] [分享]批处理删除电脑重复文件 供交流学习 [打印本页]

作者: rs369007    时间: 2014-6-23 00:40     标题: [分享]批处理删除电脑重复文件 供交流学习

本帖最后由 rs369007 于 2014-6-23 20:22 编辑
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. title 清理相同的文件-code by rs369007/2014/6/20
  3. :start
  4. set /p act_path=输入目录=
  5. if not exist "!act_path!" (echo 输入目录不存在,请重新输入&ping -w 1000 -n 2 127.1>nul 2>nul&cls&goto start)
  6. set /a var=!time:~6,-3! 2>nul
  7. set /a total=0 2>nul
  8. set /a del_num=0 2>nul
  9. set "sort=C:\WINDOWS\system32\sort.exe"
  10. for /f "delims=\" %%j in ("!act_path!") do set backup_folder="%%j\rs-backup_folder\!var!"&md !backup_folder! 2>nul
  11. set tmp=c:\tmp&rd !tmp!>nul 2>nul
  12. if not exist !tmp! (md "!tmp!">nul 2>nul) else (del /f /s /q "!tmp!">nul 2>nul)
  13. set rec_file="!backup_folder!\清理记录.txt"
  14. set /a hour=!time:~0,-9! 2>nul
  15. set /a minute=!time:~3,-6! 2>nul
  16. set /a second=!time:~6,-3! 2>nul
  17. echo.&echo 程序正在对文件进行分类,请耐心等待...
  18. ::分类获取文件列表
  19. pushd "!act_path!"
  20. for /R %%i in (*) do (
  21. set extension=%%~xi&set extension=!extension:~-3!
  22. echo %%~zi;%%~dpnxi;%%~xi;%%~ti;%%~ni>>"!tmp!\!extension!%%~zi.txt" 2>nul
  23. )
  24. ::分类获取完成
  25. pushd "!tmp!"
  26. ::开始比较,记录重复文件,记录复件,而不记录原件
  27. cls&echo.&echo 开始筛选相同文件...&ping -w 1000 -n 2 127.1>nul 2>nul
  28. echo !date!!time!>!rec_file! 2>nul
  29. for /R %%i in (*) do (
  30. set filename=%%~nxi
  31. set /a st_count=0
  32. for /f "tokens=1-5 delims=;" %%j in (!filename!) do (
  33. set /a st_count+=1
  34. if !st_count! NEQ !del_num! (
  35. set filesize=%%j
  36. set filetime=%%m
  37. set in_filename=%%n
  38. set fullpath=%%k
  39. set /a nd_count=0
  40. echo %%k 2>nul
  41. for /f "tokens=1-5 delims=;" %%j in (!filename!) do (
  42. set /a nd_count+=1
  43. if !nd_count! GTR !st_count! (
  44. if "!filesize!"=="%%j" (
  45. if "!filetime!"=="%%m" (
  46. echo !in_filename!>tmp 2>nul
  47. (findstr /C:"%%n" tmp>nul 2>nul&&(echo !fullpath!;!filesize!>>!rec_file! 2>nul))||(echo %%k;%%j>>!rec_file! 2>nul)
  48. set /a del_num=!nd_count!
  49. )
  50. )
  51. )
  52. )
  53. )
  54. )
  55. )
  56. pushd !backup_folder!
  57. cls&echo.&echo 开始删除相同文件:&ping -w 1000 -n 2 127.1>nul 2>nul
  58. if exist 清理记录.txt (
  59. for /f "skip=1 tokens=1-2 delims=;" %%j in (清理记录.txt) do (
  60. copy "%%j" "!backup_folder!">nul 2>nul
  61. del /f /s /q "%%j"
  62. set /a total+=%%k
  63. )
  64. ) else (
  65. echo 没有发现相同的文件。)
  66. echo.&echo (存放在!rec_file!) 2>nul&echo.
  67. set /a total=!total!/1024
  68. set /a total=!total!/1024
  69. echo 一共帮助你清理!total!MB 2>nul
  70. set /a o_hour=!time:~0,-9! 2>nul
  71. set /a o_minute=!time:~3,-6! 2>nul
  72. set /a o_second=!time:~6,-3! 2>nul
  73. set /a o_hour=!o_hour!-!hour! 2>nul
  74. set /a o_minute=!o_minute!-!minute! 2>nul
  75. set /a o_second=!o_second!-!second! 2>nul
  76. if !o_hour! LSS 0 (set /a o_hour=!o_hour!+24)
  77. if !o_minute! LSS 0 (set /a o_minute=!o_minute!+60&set /a o_hour=!o_hour!-1)
  78. if !o_second! LSS 0 (set /a o_second=!o_second!+60&set /a o_minute=!o_minute!-1)
  79. echo 清理耗时:!o_hour! 小时 !o_minute! 分钟 !o_second! 秒 2>nul
  80. rem 删除自身临时文件.
  81. del /f /s /q "!tmp!">nul 2>nul
  82. rem 删除空文件夹
  83. for /f "tokens=*" %%a in ('dir /b /ad /s "!act_path!"^|!sort! /r') do rd "%%a" 2>nul
  84. rd !tmp!>nul 2>nul
  85. echo 清理结束.&pause>nul
复制代码

作者: rs369007    时间: 2014-6-23 20:00

本帖最后由 rs369007 于 2014-6-23 20:25 编辑

这个脚本可以整盘搜索相同文件(文件类型、文件的大小、文件创建时间确定相同文件),并且能够准确删除复件,删除前会对删除文件进行记录,并且备份
注意:应用程序文件夹不能包含在清理的目录内。应用程序内相同文件,不意味是无用的文件。
作者: teslawq    时间: 2016-11-1 15:52

这个好!谢谢楼主分享!




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