[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 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
复制代码

TOP

不怎么会用FINDSTR,有没有更精简的方法

TOP

返回列表