复制代码
- @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
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.
不过文件一多效率就恶心了...复制代码
- @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"
- )
欢迎光临 批处理之家 (http://bathome.net./) | Powered by Discuz! 7.2 |