Crear un BAT, help!

Buenos dias,

A ver si alguien me puede echar una mano con algo que creo que es bastante sencillo pero ando perdido.

Necesito crear un BAT que vaya a una ruta de red que le indique y desde esa ruta compruebe todas las subcarpetas y en las que se llamen "ERROR" (hay unas cuantas dentro de esa ruta) me reporte si hay nuevos ficheros dentro de esas carpetas y me saque las rutas que tengan nuevos ficheros la carpeta.

Si lo ejecuto hoy compruebe si hay algo nuevo desde la ultima vez que lo ejecute.

No se si me explique correctamente....



Gracias!
Hombre, es relativamente sencillo, pero no trivial. Espero no estar haciendo los deberes de nadie.

@echo off
setlocal enabledelayedexpansion

:: Configuración
set "network_path=\\ruta\de\red"
set "log_file=%~dp0file_log.txt"

:: Obtener la fecha y hora actual para el log
set "current_date=%date:~6,4%-%date:~3,2%-%date:~0,2%"
set "current_time=%time:~0,2%%time:~3,2%%time:~6,2%"

:: Leer la última fecha y hora de ejecución
if exist "%log_file%" (
    for /f "delims=" %%i in (%log_file%) do set "last_run=%%i"
) else (
    set "last_run=1900-01-01 00:00:00"
)

:: Guardar la fecha y hora de ejecución actual
echo %current_date% %current_time% > "%log_file%"

:: Buscar carpetas "ERROR" y verificar si hay archivos nuevos
for /f "tokens=*" %%D in ('dir "%network_path%\ERROR" /b /s /a:d 2^>nul') do (
    set "error_folder=%%D"
    for /f "tokens=*" %%F in ('dir "!error_folder!" /b /a-d 2^>nul') do (
        set "file_path=%%F"
        set "file_modified=!file_path!"

        :: Obtener la fecha y hora de modificación del archivo
        for /f "tokens=1-3 delims= " %%a in ('forfiles /p "!error_folder!" /m "%%~nxF" /c "cmd /c echo @fdate @ftime"') do (
            set "file_date=%%a"
            set "file_time=%%b"

            :: Comparar con la última ejecución
            set "file_fulltime=!file_date! !file_time!"
            if "!file_fulltime!" GTR "!last_run!" (
                echo Nuevo archivo: !file_path!
            )
        )
    )
)

endlocal
pause
@Acermax Pues parece que sí, que le arreglaste los deberes a alguien (de clase o del curro). Yo para estas cosas siempre espero que como poco pongan lo que llevan hecho, por aquello de ver que al menos han intentado algo, aunque no le acabe de funcionar. Porque visto lo visto, tú te has molestado para sacarle las castañas del fuego y ni para darte las gracias ha tenido tiempo el paisano.
@ad-verso

El OP parece que tiene 40 años, deberes no creo que sean, algo del trabajo podría ser.

Educación para dar las gracias espero que sí la tenga, y se pasará por aquí a darlas una vez haya comprobado que el código funciona.

Supongo yo :-|
neofonta escribió:@ad-verso

El OP parece que tiene 40 años, deberes no creo que sean, algo del trabajo podría ser.

Educación para dar las gracias espero que sí la tenga, y se pasará por aquí a darlas una vez haya comprobado que el código funciona.

Supongo yo :-|


Los deberes del niño
Justo en un post en el que Chat-OGT iría como anillo al dedo va un compañero y se curra la respuesta. Es de agradecer que queden buenos samaritanos para estas cosas, pero como dice @ad-verso yo si no veo que al menos se han "peleado" un poco con ello... creo que no hago ningún favor dando la respuesta.

Saludos
Acermax escribió:Hombre, es relativamente sencillo, pero no trivial. Espero no estar haciendo los deberes de nadie.

@echo off
setlocal enabledelayedexpansion

:: Configuración
set "network_path=\\ruta\de\red"
set "log_file=%~dp0file_log.txt"

:: Obtener la fecha y hora actual para el log
set "current_date=%date:~6,4%-%date:~3,2%-%date:~0,2%"
set "current_time=%time:~0,2%%time:~3,2%%time:~6,2%"

:: Leer la última fecha y hora de ejecución
if exist "%log_file%" (
    for /f "delims=" %%i in (%log_file%) do set "last_run=%%i"
) else (
    set "last_run=1900-01-01 00:00:00"
)

:: Guardar la fecha y hora de ejecución actual
echo %current_date% %current_time% > "%log_file%"

:: Buscar carpetas "ERROR" y verificar si hay archivos nuevos
for /f "tokens=*" %%D in ('dir "%network_path%\ERROR" /b /s /a:d 2^>nul') do (
    set "error_folder=%%D"
    for /f "tokens=*" %%F in ('dir "!error_folder!" /b /a-d 2^>nul') do (
        set "file_path=%%F"
        set "file_modified=!file_path!"

        :: Obtener la fecha y hora de modificación del archivo
        for /f "tokens=1-3 delims= " %%a in ('forfiles /p "!error_folder!" /m "%%~nxF" /c "cmd /c echo @fdate @ftime"') do (
            set "file_date=%%a"
            set "file_time=%%b"

            :: Comparar con la última ejecución
            set "file_fulltime=!file_date! !file_time!"
            if "!file_fulltime!" GTR "!last_run!" (
                echo Nuevo archivo: !file_path!
            )
        )
    )
)

endlocal
pause



Perdona que no suelo conectarme mucho por aqui y justo acabo de verlo.

Le echare un vistazo.

Muchas gracias!
6 respuestas