找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26464|回复: 2

[文件操作] [分享]批处理删除电脑重复文件 供交流学习

[复制链接]
发表于 2014-6-23 00:40:44 | 显示全部楼层 |阅读模式
本帖最后由 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.        
  21. for /R %%i in (*) do (
  22.         set extension=%%~xi&set extension=!extension:~-3!
  23.         echo %%~zi;%%~dpnxi;%%~xi;%%~ti;%%~ni>>"!tmp!\!extension!%%~zi.txt" 2>nul
  24.         )         
  25. ::分类获取完成       
  26.                                                
  27. pushd "!tmp!"
  28.        
  29. ::开始比较,记录重复文件,记录复件,而不记录原件

  30. cls&echo.&echo 开始筛选相同文件...&ping -w 1000 -n 2 127.1>nul 2>nul
  31. echo !date!!time!>!rec_file! 2>nul

  32. for /R %%i in (*) do (
  33.         set filename=%%~nxi
  34.         set /a st_count=0
  35.         for /f "tokens=1-5 delims=;" %%j in (!filename!) do (
  36.                 set /a st_count+=1
  37.                 if !st_count! NEQ !del_num! (
  38.                 set filesize=%%j
  39.                 set filetime=%%m
  40.                 set in_filename=%%n
  41.                 set fullpath=%%k
  42.                 set /a nd_count=0
  43.                 echo %%k 2>nul
  44.                 for /f "tokens=1-5 delims=;" %%j in (!filename!) do (
  45.                 set /a nd_count+=1
  46.                 if !nd_count! GTR !st_count! (
  47.                 if "!filesize!"=="%%j" (
  48.                 if "!filetime!"=="%%m" (
  49.                         echo !in_filename!>tmp 2>nul
  50.                         (findstr /C:"%%n" tmp>nul 2>nul&&(echo !fullpath!;!filesize!>>!rec_file! 2>nul))||(echo %%k;%%j>>!rec_file! 2>nul)               
  51.                         set /a del_num=!nd_count!
  52.                         )
  53.                         )
  54.                         )
  55.                         )
  56.                         )
  57.                         )
  58.                         )

  59. pushd !backup_folder!
  60. cls&echo.&echo 开始删除相同文件:&ping -w 1000 -n 2 127.1>nul 2>nul

  61. if exist 清理记录.txt (
  62.         for /f "skip=1 tokens=1-2 delims=;" %%j in (清理记录.txt) do (
  63.         copy "%%j" "!backup_folder!">nul 2>nul
  64.         del /f /s /q "%%j"
  65.         set /a total+=%%k
  66.         )
  67.         ) else (
  68.         echo 没有发现相同的文件。)

  69. echo.&echo (存放在!rec_file!) 2>nul&echo.
  70. set /a total=!total!/1024
  71. set /a total=!total!/1024
  72. echo 一共帮助你清理!total!MB 2>nul


  73. set /a o_hour=!time:~0,-9! 2>nul
  74. set /a o_minute=!time:~3,-6! 2>nul
  75. set /a o_second=!time:~6,-3! 2>nul

  76. set /a o_hour=!o_hour!-!hour! 2>nul
  77. set /a o_minute=!o_minute!-!minute! 2>nul
  78. set /a o_second=!o_second!-!second! 2>nul
  79. if !o_hour! LSS 0 (set /a o_hour=!o_hour!+24)
  80. if !o_minute! LSS 0 (set /a o_minute=!o_minute!+60&set /a o_hour=!o_hour!-1)
  81. if !o_second! LSS 0 (set /a o_second=!o_second!+60&set /a o_minute=!o_minute!-1)


  82. echo 清理耗时:!o_hour! 小时 !o_minute! 分钟 !o_second! 秒 2>nul
  83. rem 删除自身临时文件.
  84. del /f /s /q "!tmp!">nul 2>nul
  85. rem 删除空文件夹
  86. for /f "tokens=*" %%a in ('dir /b /ad /s "!act_path!"^|!sort! /r') do rd "%%a" 2>nul
  87. rd !tmp!>nul 2>nul
  88. echo 清理结束.&pause>nul

复制代码
 楼主| 发表于 2014-6-23 20:00:01 | 显示全部楼层
本帖最后由 rs369007 于 2014-6-23 20:25 编辑

这个脚本可以整盘搜索相同文件(文件类型、文件的大小、文件创建时间确定相同文件),并且能够准确删除复件,删除前会对删除文件进行记录,并且备份
注意:应用程序文件夹不能包含在清理的目录内。应用程序内相同文件,不意味是无用的文件。
发表于 2016-11-1 15:52:08 | 显示全部楼层
这个好!谢谢楼主分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:42 , Processed in 0.017917 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表