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:
IMAGENESScript 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.