标题: [文本处理] 批处理如何删除大批量相同大小的文件 [打印本页]
作者: sinoshon 时间: 2021-4-17 17:41 标题: 批处理如何删除大批量相同大小的文件
请教各位大佬:在同一个文件夹内,怎样批量删除大小相同,且格式相同的文件(只保留一个),Thanks♪(・ω・)ノ!
作者: newswan 时间: 2021-4-17 18:44
- @echo off
- setlocal enableDelayedExpansion
-
- for %%a in (txt jpg) do (
- set s=
- for /f %%a in ('dir /b /os *.%%a') do (
- if "!s!"=="%%~za" (
- echo %%a %%~za
- ) else (
- set s=%%~za
- )
- )
- )
复制代码
第一个 for 里面填要处理的文件的格式
作者: sinoshon 时间: 2021-4-18 08:17
第一个 for 里面填要处理的文件的格式
newswan 发表于 2021-4-17 18:44
非常感谢大佬的回复,我是检测和删除MP4格式文件的,我把您上面的代码for里面的改成mp4后,发现dos系统可以检测文件,但是并没有删除多余相同大小的文件。烦请您在帮看看或测试一下,万分感谢!!!
作者: Batcher 时间: 2021-4-18 11:35
回复 3# sinoshon
第8行下面加上 del 命令试试
作者: smss 时间: 2021-4-18 11:52
- @Echo off&SetLocal EnableDelayedExpansion
- 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
- 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
- goto :eof
- :1
- if !b%1!==!b%2! if !c%1!==!c%2! set b%2=&del "!a%2!"
- goto :eof
复制代码
作者: xp3000 时间: 2021-4-18 13:15
本帖最后由 xp3000 于 2021-4-21 09:24 编辑
同样大小容易误删,这个根据MD5删除,包含子文件夹也不保留第二个
想到如果强行关闭,下次可能回造成误删,在结尾和开头都添加了删除log- @cd "%~dp0"
- @echo off&setlocal enabledelayedexpansion
- del /F /S /Q "%~dp0*.log"&cls
- for /f "delims=" %%a in ('dir /a-d /b /s *.JPG *.BMP *.PNG') do (
- for /f "delims=" %%b in ('certutil -hashfile "%%a" MD5^|findstr /V 哈希^|findstr /V 完成') do (
- set "MD5=%%b"&set MD5=!MD5:^ =!&echo !MD5!-%%a|sort /+1>>"%~dp0!MD5!.log"
- for /f "tokens=1,*delims=-" %%i in ('findstr /n /i "!MD5!" !MD5!.log^|findstr /v "^1:"') do (
- del "%%j" 2>nul
- )
- )
- )
- del /F /S /Q "%~dp0*.log"&cls
- echo 删除完成
- pause
复制代码
如果子文件夹不处理,将dir /a-d /b /s改为dir /b/a-d/oN
结合楼下直接这个在临时文件夹处理- @echo off&setlocal enabledelayedexpansion
- @cd "%~dp0"&if exist "%temp%\MD5" del "%temp%\MD5\*.log" >nul 2>nul
- for /f "delims=" %%a in ('dir /a-d /b /s *.*') do (
- for /f "delims=" %%b in ('certutil -hashfile "%%a" MD5^|findstr /r /be /c:"[0-9a-f][0-9a-f ]*"') do (
- set "MD5=%%b"&set MD5=!MD5:^ =!&echo !MD5!-%%a|findstr "!MD5!"|sort /+1 >>"%temp%\MD5\!MD5!.log"
- for /f "tokens=1,*delims=-" %%i in ('findstr /n /i "!MD5!" "%temp%\MD5\!MD5!.log"^|findstr /v "^1:"') do del "%%j" 2>nul
- )
- )
- 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 删除完成
- pause
复制代码
作者: qixiaobin0715 时间: 2021-4-18 16:31
certutil -hashfile "%%a" MD5^|findstr /V 哈希^|findstr /V 完成
一次过滤也可:
certutil -hashfile "%%a" MD5^|findstr /r /be /c:"[0-9a-f][0-9a-f ]*"
作者: newswan 时间: 2021-4-18 16:36
对媒体文件,用 "重复文件检查器" 比较好
作者: xp3000 时间: 2021-4-18 17:02
不怎么会用FINDSTR,有没有更精简的方法
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |