@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
0 Comentários