avatar_Azzlaer

Verificacion y Eliminacion de archivos duplicados

Publicado por Azzlaer, Dic 16, 2024, 08:24 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Azzlaer

Hay forma de verificar que archivos estan repetidos en una carpeta usando un archivo BAT en windows?
Repetidos seria verificando CRC o alguna otra cosa para lograr identificar a los archivos si son los mismos.

Y luego de verificar todos los archivos debe mostrar un  contador de los archivos repetidos.
Un contador de todos los archivos que analizo.

Luego debera dejar un registro en un archivo LOG de nombre con fecha y hora en que se termino de ejecutar el Bat.

Luego debera pedir confirmacion para eliminar los archivos repetidos pero siempre dejando 1, los demas que esten repetidos se eliminaran y debera mostrar un contador de los archivos que se van a eliminar para luego mostrarlo en el LOG los archivos que fueron eliminados.

Es posible hacer todo lo que solicitas utilizando un archivo BAT en Windows con una combinación de comandos y herramientas integradas como certutil (para calcular el hash CRC32 o SHA256 de los archivos) y la lógica de los scripts por lotes. A continuación, se presenta un ejemplo funcional de cómo lograrlo:

IMAGENES




Script BAT para detectar y manejar archivos repetidos:

@echo off
setlocal enabledelayedexpansion

REM Ruta de la carpeta a analizar
set "folder=C:\Ruta\De\La\Carpeta"

REM Nombre del archivo log
set "logFile=reporte_%date:~-4%-%date:~3,2%-%date:~0,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%.log"

REM Contadores
set totalFiles=0
set duplicateCount=0
set filesToDelete=0

REM Directorio temporal para almacenar hashes
set "tempHashes=%temp%\hashes.txt"

REM Crear archivo de hashes vacío
echo. > "%tempHashes%"

REM Crear archivo de log
echo Reporte generado el %date% a las %time% > "%logFile%"
echo. >> "%logFile%"

REM Recorrer los archivos en la carpeta
for /r "%folder%" %%F in (*) do (
    set /a totalFiles+=1

    REM Calcular el hash del archivo
    for /f "delims=" %%H in ('certutil -hashfile "%%F" SHA256 ^| findstr /v "hash"') do (
        set hash=%%H
    )

    REM Verificar si el hash ya existe
    findstr /i "!hash!" "%tempHashes%" >nul
    if !errorlevel! equ 0 (
        REM Archivo duplicado
        echo Archivo duplicado encontrado: %%F >> "%logFile%"
        set /a duplicateCount+=1
        echo %%F >> "%temp%\duplicates.txt"
    ) else (
        REM Nuevo hash
        echo !hash! %%F >> "%tempHashes%"
    )
)

REM Mostrar resultados
echo Total de archivos analizados: %totalFiles%
echo Archivos duplicados encontrados: %duplicateCount%
echo. >> "%logFile%"
echo Total de archivos analizados: %totalFiles% >> "%logFile%"
echo Archivos duplicados encontrados: %duplicateCount% >> "%logFile%"

REM Confirmación para eliminar duplicados
if %duplicateCount% gtr 0 (
    echo Se eliminarán los duplicados, dejando uno de cada uno.
    echo ¿Desea continuar? (S/N)
    choice /c SY /n /m "Confirmar eliminación"
    if errorlevel 2 (
        echo Operación cancelada por el usuario.
        goto :end
    )

    REM Eliminar archivos duplicados (manteniendo uno)
    for /f "tokens=1,* delims=" %%D in ('type "%temp%\duplicates.txt"') do (
        del "%%D"
        set /a filesToDelete+=1
        echo Eliminado: %%D >> "%logFile%"
    )

    REM Mostrar resultados finales
    echo Total de archivos eliminados: %filesToDelete%
    echo Total de archivos eliminados: %filesToDelete% >> "%logFile%"
) else (
    echo No se encontraron archivos duplicados para eliminar.
    echo No se encontraron archivos duplicados para eliminar. >> "%logFile%"
)

:end
REM Registrar finalización
echo. >> "%logFile%"
echo Script finalizado el %date% a las %time%. >> "%logFile%"
echo Script finalizado.
pause

¿Qué hace este script?

Calcula hashes SHA256 de todos los archivos en la carpeta usando certutil.
Identifica duplicados comparando los hashes y registra los nombres de los archivos duplicados en un archivo temporal.
Cuenta y registra:
El total de archivos analizados.
El número de archivos duplicados.

Solicita confirmación para eliminar duplicados, asegurándose de mantener al menos una copia de cada archivo.
Elimina archivos duplicados tras la confirmación y registra los eliminados en un archivo log.
Crea un archivo log con la fecha, hora, y un resumen del análisis y las acciones tomadas.

Notas:
Certutil viene incluido en Windows y es ideal para calcular hashes.
Log detallado: Puedes personalizar el contenido del archivo log si necesitas más información.
Asegúrate de cambiar C:\Ruta\De\La\Carpeta por la ruta de la carpeta que deseas analizar.



Si alguna vez ves algun enlace que yo mismo publique y ese enlace esta caido "OFFLINE" que ya no se encuentra, solo debes etiquetarme para volver a subir el archivo. Todas las descargas publicadas se tiene una copia de seguridad en mis discos extraibles que tengo en casa. Gracias