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复制代码
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" )复制代码
TOP
qzwqzw (活着就是幸福)当前离线
贵宾
523066680 (消遣区)当前离线
版主
neorobin (neorobin)当前离线
技术组成员
Hello123World 当前离线
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.