Un archivo .bat para buscar archivos duplicados

He creado este “programa”, los que sabéis de informática… ¡Respetarme, que soy mocito!

Para buscar archivos duplicados por nombre de la carpeta donde esté y mandar uno de ellos a la carpeta “1 DuplicadoS” que se crea en esa carpeta para revisarlos y borrarlos.

A mí me ha quitado 500gb de fotos duplicadas del movil, que son las que voy guardando de vez en cuando y ¡ya revisaré! y nunca he revisado.

No borra nada, o por lo menos no he puesto que borre nada, sólo lo manda a esa carpeta

Os lo subo en TXT. Solo tenéis que abrir un procesador de texto o el blog de notas de win copiarlo y darle el nombre que queráis acabado en .bat.

Si hay algún técnico y lo revisa ¡mas mejor!

:anger: :loud_sound: Quien lo utilice bajo su responsabilidad. :loud_sound: :anger:

@echo off
setlocal enableDelayedExpansion

rem Define la carpeta de destino para los duplicados
set “duplicados_folder=1 DuplicadoS”

rem Obtiene la ruta de la carpeta actual donde se ejecuta el script
set “current_folder=cd

rem =========================================================
rem ANUNCIO DE ADVERTENCIA SIMULADO
rem =========================================================
cls
echo.
echo.
echo ====================================================
echo = A D V E R T E N C I A =
echo ====================================================
echo.
echo Este script revisara la siguiente carpeta:
echo.
echo current_folder
echo.
echo Asegurese de que esta es la carpeta que desea revisar.
echo Los duplicados seran movidos a la carpeta “duplicados_folder”.
echo.
echo ====================================================
echo.
echo.
pause
cls
rem =========================================================
rem FIN DEL ANUNCIO
rem =========================================================

rem Crea la carpeta si no existe
if not exist “duplicados_folder” (
mkdir “duplicados_folder
echo Se ha creado la carpeta para duplicados: current_folder%duplicados_folder%
)

echo.
echo =========================================================
echo Iniciando la busqueda de duplicados por NOMBRE…
echo Carpeta raiz: current_folder
echo =========================================================
echo.

rem Usar un archivo temporal para guardar los nombres de archivos encontrados
set “temp_name_list=TEMP\processed_names.txt”
if exist “temp_name_list” del “temp_name_list

rem Bucle principal para procesar archivos de imagen
for /R “current_folder” %%A in (*.jpg *.jpeg *.png *.gif *.bmp *.tiff) do (
rem Obtiene solo el nombre del archivo (con extension)
set “filename=%%~nxA”
set “filepath=%%~fA”

rem Muestra el archivo que se esta revisando
echo Revisando: "!filepath!"

rem Ignora los archivos que ya esten en la carpeta de duplicados
for %%B in ("!filepath!") do set "parent_dir=%%~dpB"
if /i not "!parent_dir:~0,-1!"=="%current_folder%\%duplicados_folder%" (
    rem Busca si ya hemos visto un archivo con este nombre
    findstr /I /C:"!filename!" "%temp_name_list%" >nul
    if errorlevel 1 (
        rem Si no se encuentra, es el primer archivo con ese nombre, lo guardamos
        echo !filename! >> "%temp_name_list%"
    ) else (
        rem Si se encuentra, es un duplicado por nombre, lo movemos
        echo   -> Duplicado encontrado!
        
        rem Evita sobreescribir archivos con el mismo nombre en la carpeta de duplicados
        set "new_filename=!filename!"
        set /a "counter=1"
        :check_name
        if exist "%duplicados_folder%\!new_filename!" (
            for %%F in ("!filename!") do (
                set "name_part=%%~nF"
                set "ext_part=%%~xF"
            )
            set "new_filename=!name_part!_!counter!!ext_part!"
            set /a "counter+=1"
            goto check_name
        )
        
        rem Mueve el archivo a la carpeta de duplicados
        move "!filepath!" "%duplicados_folder%\!new_filename!" >nul
        echo   -> Archivo movido a "%duplicados_folder%\!new_filename!"
        echo.
    )
)

)

echo.
echo =========================================================
echo Proceso finalizado.
echo Se han movido los duplicados por nombre a la carpeta ‘duplicados_folder’.
echo =========================================================
if exist “temp_name_list” del “temp_name_list
pause

:anger: :loud_sound: Quien lo utilice bajo su responsabilidad. :loud_sound: :anger:

Lo he probado y no funciona bien copiado por quí, os dejo un enlace para que lo descargueis, este archivo .bat

Si no se puede esto que se borre automáticamente.

https://www.dropbox.com/scl/fi/jfke2wv1pwaa8fxr2g3hl/Buscador-de-duplicados.bat?rlkey=s50kb3pb6vrzokdcyrhks6yl5&st=6rn2h1t6&dl=0

OJO si hay varios con el mismo nombre sólo mueve uno del resto pasa. Llego hasta donde llego.

Yo lo paso varias veces hasta que la carpeta 1 duplicados está vacia :wink:

Gracias joven, lo probaré cuando vuelva de vacaciones…
Qué la Fuerza te acompañe!

1 me gusta

Me parece un importe interesante para quien haga fotos con el móvil que es donde se suelen duplicar, no es mi caso ya que yo hago como mucho 30 fotos con el móvil al año… lo sé soy raro. A lo que iba es que hace muchos años que no le doy a la programación pero lo que veo dentro de mi conocimientos esta correcto, no voy a probarlo porque no tengo con qué pero si te quería decir @Joniafotografia que lo de mover todas las copias lo puedes pulir metiendo ese .bat en ChatGPT a no ser que quieras comerte el coco con ello. Solo es meterlo y decirle que quieres que te lo modifique para mover todos con el mismo nombre, pasándolos a la carpeta de destino con el mismo nombre y un dígito distintivo. Un saludo

1 me gusta

Yo lo he hecho pensando en el móvil, pero vale para cualquier tipo archivo.
Ya me he calentado bastante la cocorota, lo paso varias veces y listo :D.

1 me gusta

Cierto Manolo, aunque donde mas se suele duplicar es en el móvil por eso hacía referencia a esos archivos, lo de que te lo resuelva la IA es más que nada para eso mismo, para no calentarte más el coco si lo querías resolver rápido aunque para alguien que esté mas puesto en el tema seguro que añadiendo un par de líneas mas al código te resuelve eso. Yo me quedé en un nivel muy básico en su día y es algo que quizás algún día retome. Lo dicho, me parece un aporte muy interesante. Un saludo

1 me gusta

Gracias por el aporte Manolo!!!

Salu2.
Albert .

1 me gusta