cjiabing (甲兵时代)当前离线
荣誉版主
@echo off&setlocal enabledelayedexpansion ::by cjiabing&date 2011.6.23 title 重复文件搜索与处理工具 Batch For Vistanita Duplicate Finder V1.1 :VDFStart cls echo; echo; echo; ************************* echo; * 重复文件搜索与处理 * echo; ************************* echo; echo; ============================================================================= echo; 1、将本程序放到需要搜索目录下,双击开始运行,按任意键开始搜索。 echo; 2、可能要几分钟时间,文件越多,需要时间越多。久不动时可能是文件有误。 echo; 3、搜索使用“For /r”和“Findstr”命令,搜索结果可能不完全正确。 echo; 4、处理使用“IF”匹配,提高了正确率。 echo; 5、可对搜索结果中的重复文件进行改名、转移、删除等。 echo; 6、以文件名进行判断,但无法判断文件内容,请仔细检查,谨慎操作! echo; ============================================================================= echo; ::taskkill /f /t /im findstr.exe>nul 2>nul set input= set /p input= 请输入(搜索【F】;处理【D】): if "%input%"=="" goto VDFFind if /i "%input%"=="D" goto VDFCure if /i "%input%"=="F" goto VDFFind goto VDFStart :VDFFind set tm=%time% set tj=0 set nb=0 set /a var=str=1 echo; echo; echo; 开始时间:%tm% echo; 正在搜索,请耐心等待…… title 正在搜索,请耐心等待…… echo; cd.>"%~dp0所有文件.txt" cd.>"%~dp0所有名称.txt" cd.>"%~dp0重复文件.txt" echo; for /r %%a in (*) do (echo %%a>>"%~dp0所有文件.txt"&echo %%~nxa>>"%~dp0所有名称.txt") echo; for /f "tokens=*" %%a in ('sort "%~dp0所有名称.txt"') do ( if not !var!==%%a ( set var=%%a set /a tj+=1 set str= for /f "tokens=*" %%i in ('findstr /i /e /l /c:"%%~nxa" "%~dp0所有文件.txt"') do ( set /a nb+=1 if !nb! gtr 1 (echo !str!&echo %%i&echo;) set str=%%i ) set nb=0 ) )>>"%~dp0重复文件.txt"&echo ● !tj! 搜索:%%~na echo; start "" "%~dp0重复文件.txt" del /f /q "%~dp0所有名称.txt">nul 2>nul title 搜索完毕!处理结果! :VDFCure echo; echo; ****************** echo; * 处 理 结 果 * echo; ****************** echo; ============================================================================= echo; 搜索开始时间:%tm% echo; 搜索结束时间:%time% echo; 搜索文件总数:%tj% echo 重复文件列表:%~dp0重复文件.txt echo; ============================================================================= echo; echo; echo; ****************** echo; * 结 果 处 理 * echo; ****************** echo; ============================================================================= echo; 1、改名:保留其中一个,在其它重复的文件名前面添加“重复_”或“New_重复_”; echo; 改名相当于给重复文件打标签,改名后可手动处理。 echo; 2、转移:保留其中一个,将其它重复的文件转移到:%~dp0重复文件 echo; 有多个重复时会被覆盖。 echo; 3、删除:保留其中一个,将其余重复的文件全部删除,可能无法恢复; echo; 通常处理深层目录的而保留浅层目录的重复文件。 echo; 0、返回上一层。 echo; ============================================================================= echo; ●辨识文件名称与文件大小,不识别文件内容!请仔细检查,谨慎操作!● echo; set input= set /p input= 请输入序号: if "%input%"=="" goto VDFCure if %input%==0 (goto VDFStart) else (call :VDFCure1) cls goto VDFCure :VDFCure1 cls set tm=%time% echo; echo; 开始处理,请稍后…… echo; set a= set b= set n=0 for /f "usebackq tokens=*" %%a in ("%~dp0重复文件.txt") do ( if not "!a!"=="" if /i !a!==%%~na if exist "%%~a" ( if exist "!b!" for /f "usebackq tokens=1*" %%m in ('!b!') do ( for /f "usebackq tokens=1*" %%o in ('%%~a') do if /i %%m==%%o if /i %%n==%%p ( set /a n+=1 if %input%==1 ( if exist "%%~dpa重复_%%~nxa" (ren "%%~a" "New_重复_%%~nxa") else (ren "%%~a" "重复_%%~nxa") ) if %input%==2 ( if not exist "%~dp0重复文件" md "%~dp0重复文件" move /y "%%~a" "%~dp0重复文件" ) if %input%==3 (del /q /f /s "%%~a") ) ) ) set "a=%%~na"&set "b=%%~a" ) echo; echo; ****************** echo; * 处 理 结 果 * echo; ****************** echo; ============================================================================= echo; 处理开始时间:%tm% echo; 处理结束时间:%time% echo; 处理文件总数:!n! echo; ============================================================================= echo; pause goto :eof复制代码
tmplinshi 当前离线
版主
Finddupe will only read the first 32k of a file and compute a hash based on that. Only if that matches with another file will it even read the entire files.
TOP
Hello123World 当前离线
neorobin (neorobin)当前离线
技术组成员
qzwqzw (活着就是幸福)当前离线
贵宾
523066680 (消遣区)当前离线
CrLf 当前离线
论坛巡查
@echo off&setlocal enabledelayedexpansion set qz=重复_@ for /l %%a in (1 1 100) do set qz=new_!qz! for /f "delims=" %%a in ('dir /s /a-d /b *.mp3') do ( if defined %%~za%%~na ren "%%a" "!qz:~-%%a,-1!%%~nxa" set /a "%%~za%%~na+=4" )复制代码