@echo off setlocal enabledelayedexpansion :: Configuração set "arquivo_saida=similaridades.txt" set /a similaridade_minima=3 :: Número mínimo de caracteres iguais em sequência para considerar similar if exist "%arquivo_saida%" del "%arquivo_saida%" echo Buscando arquivos com nomes semelhantes... echo RELATORIO DE NOMES SEMELHANTES > "%arquivo_saida%" echo ========================================= >> "%arquivo_saida%" echo. >> "%arquivo_saida%" :: Coleta todos os arquivos set i=0 for %%f in (*.*) do ( set /a i+=1 set "arquivo[!i!]=%%~nf" set "extensao[!i!]=%%~xf" set "nomecompleto[!i!]=%%~nxf" ) :: Comparação dos arquivos set /a grupos=0 set /a arquivos_processados=0 for /l %%i in (1,1,%i%) do ( if not defined processed[%%i] ( set "base=!arquivo[%%i]!" set "grupo=" set /a count=0 for /l %%j in (1,1,%i%) do ( if not defined processed[%%j] ( call :comparar_nomes "!base!" "!arquivo[%%j]!" if !similar! geq %similaridade_minima% ( set "grupo=!grupo! %%j" set /a count+=1 set "processed[%%j]=1" ) ) ) if !count! gtr 1 ( set /a grupos+=1 echo GRUPO !grupos! (!count! arquivos): >> "%arquivo_saida%" for %%k in (!grupo!) do ( echo - !nomecompleto[%%k]! >> "%arquivo_saida%" ) echo. >> "%arquivo_saida%" ) ) set /a arquivos_processados+=1 echo Progresso: !arquivos_processados! de !i! arquivos analisados ) echo. >> "%arquivo_saida%" echo Total de grupos semelhantes encontrados: !grupos! >> "%arquivo_saida%" echo Total de arquivos analisados: !i! >> "%arquivo_saida%" echo Análise concluída. Resultados em "%arquivo_saida%" pause exit /b :comparar_nomes set "str1=%~1" set "str2=%~2" set /a max_similar=0 set /a len1=0 set /a len2=0 :: Calcula comprimento das strings :next_char1 if not "!str1:~%len1%,1!"=="" set /a len1+=1 & goto next_char1 :next_char2 if not "!str2:~%len2%,1!"=="" set /a len2+=1 & goto next_char2 :: Encontra a maior substring comum for /l %%x in (0,1,!len1!) do ( for /l %%y in (0,1,!len2!) do ( set /a n=0 :compare_loop set "c1=!str1:~%%x,%n%!" set "c2=!str2:~%%y,%n%!" if "!c1!"=="" goto end_compare if "!c2!"=="" goto end_compare if "!c1!" neq "!c2!" goto end_compare set /a n+=1 goto compare_loop :end_compare if !n! gtr !max_similar! set /a max_similar=!n! ) ) set "similar=!max_similar!" goto :eof

Postar um comentário

0 Comentários