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

[文本处理] 批处理如何删除大批量相同大小的文件

[复制链接]
发表于 2021-4-17 17:41:56 | 显示全部楼层 |阅读模式
请教各位大佬:在同一个文件夹内,怎样批量删除大小相同,且格式相同的文件(只保留一个),Thanks♪(・ω・)ノ!
发表于 2021-4-17 18:44:14 | 显示全部楼层

  1. @echo off
  2. setlocal enableDelayedExpansion

  3. for %%a in (txt jpg) do (
  4.     set s=
  5.     for /f %%a in ('dir /b /os *.%%a') do (
  6.         if "!s!"=="%%~za" (
  7.             echo %%a %%~za
  8.         ) else (
  9.             set s=%%~za
  10.         )
  11.     )
  12. )

复制代码
第一个 for 里面填要处理的文件的格式
 楼主| 发表于 2021-4-18 08:17:41 | 显示全部楼层
第一个 for 里面填要处理的文件的格式
newswan 发表于 2021-4-17 18:44



非常感谢大佬的回复,我是检测和删除MP4格式文件的,我把您上面的代码for里面的改成mp4后,发现dos系统可以检测文件,但是并没有删除多余相同大小的文件。烦请您在帮看看或测试一下,万分感谢!!!
发表于 2021-4-18 11:35:26 | 显示全部楼层
回复 3# sinoshon


    第8行下面加上 del 命令试试
发表于 2021-4-18 11:52:20 | 显示全部楼层
  1. @Echo off&SetLocal EnableDelayedExpansion
  2. for /f "tokens=*" %%a in ('dir/a-d/b/oe *.mp4')do set/a c+=1&set a!c!=%%a&set b!c!=%%~za&set c!c!=%%~xa
  3. for /l %%a in (1,1,%c%)do set/a d=%%a+1&for /l %%b in (!d!,1,%c%)do if not !b%%a!.==. call :1 %%a %%b
  4. goto :eof
  5. :1
  6. if !b%1!==!b%2! if !c%1!==!c%2! set b%2=&del "!a%2!"
  7. goto :eof
复制代码
发表于 2021-4-18 13:15:09 | 显示全部楼层
本帖最后由 xp3000 于 2021-4-21 09:24 编辑

同样大小容易误删,这个根据MD5删除,包含子文件夹也不保留第二个
想到如果强行关闭,下次可能回造成误删,在结尾和开头都添加了删除log
  1. @cd "%~dp0"
  2. @echo off&setlocal enabledelayedexpansion
  3. del /F /S /Q "%~dp0*.log"&cls
  4. for /f "delims=" %%a in ('dir /a-d /b /s *.JPG *.BMP *.PNG') do (
  5.     for /f "delims=" %%b in ('certutil -hashfile "%%a" MD5^|findstr /V 哈希^|findstr /V 完成') do (
  6.     set "MD5=%%b"&set MD5=!MD5:^ =!&echo !MD5!-%%a|sort /+1>>"%~dp0!MD5!.log"
  7.          for /f "tokens=1,*delims=-" %%i in ('findstr /n /i "!MD5!" !MD5!.log^|findstr /v  "^1:"') do (
  8.          del "%%j" 2>nul
  9.         )
  10.     )
  11. )
  12. del /F /S /Q "%~dp0*.log"&cls
  13. echo 删除完成
  14. pause
复制代码
如果子文件夹不处理,将dir /a-d /b /s改为dir /b/a-d/oN

结合楼下直接这个在临时文件夹处理
  1. @echo off&setlocal enabledelayedexpansion
  2. @cd "%~dp0"&if exist "%temp%\MD5" del "%temp%\MD5\*.log" >nul 2>nul
  3. for /f "delims=" %%a in ('dir /a-d /b /s *.*') do (
  4.     for /f "delims=" %%b in ('certutil -hashfile "%%a" MD5^|findstr /r /be /c:"[0-9a-f][0-9a-f ]*"') do (
  5.     set "MD5=%%b"&set MD5=!MD5:^ =!&echo !MD5!-%%a|findstr "!MD5!"|sort /+1 >>"%temp%\MD5\!MD5!.log"
  6.         for /f "tokens=1,*delims=-" %%i in ('findstr /n /i "!MD5!" "%temp%\MD5\!MD5!.log"^|findstr /v  "^1:"') do del "%%j" 2>nul
  7.         )
  8.     )
  9. for /f "tokens=*" %%k in ('dir/s/b/ad^|sort /r') do rd "%%k" >nul 2>nul& del "%temp%\MD5\*.log" >nul 2>nul&echo 删除完成
  10. pause
复制代码
发表于 2021-4-18 16:31:39 | 显示全部楼层
certutil -hashfile "%%a" MD5^|findstr /V 哈希^|findstr /V 完成
一次过滤也可:
certutil -hashfile "%%a" MD5^|findstr /r /be /c:"[0-9a-f][0-9a-f ]*"
发表于 2021-4-18 16:36:59 | 显示全部楼层
对媒体文件,用 "重复文件检查器" 比较好
发表于 2021-4-18 17:02:29 | 显示全部楼层
不怎么会用FINDSTR,有没有更精简的方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 16:01 , Processed in 0.029722 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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