Eliminar un archivo antiguo de X horas

Sulyvan77 Mensajes publicados 3 Estado Miembro -  
brucine Mensajes publicados 24984 Fecha de registro   Estado Miembro Última intervención   -
Hola,

Actualmente estoy en prácticas en una gran empresa y se me ha pedido que realice un script en Batch o VB para eliminar archivos temporales, pero solo los archivos que tengan más de 3 horas.
Realmente no soy un experto en scripting, estoy comenzando.
Aquí está el código que encontré en internet y que intenté modificar sin éxito, resultando en un mensaje de error.
@echo off

set fich=C:\Users\paje01\Desktop\TEST\test1
set hora=3

pause
forfiles -p %fich% -s -m *.* -d -0 -c "cmd /c del @FILE" -d -3

pause
@exit


Entonces, obtengo el siguiente mensaje de error:

Presione una tecla para continuar...
Error: Argumento u opción no válida - «cmd /c del @FILE».
Escriba "FORFILES /?" para mostrar la sintaxis.
Presione una tecla para continuar...


Así que, si alguien tiene una solución para ofrecerme :)
Gracias y buen día,

4 respuestas

  1. jee pee Mensajes publicados 31892 Fecha de registro   Estado Moderador Última intervención   9 984
     
    Hola,

    En tu comando falta un espacio entre
    -3 -c
     

    Sin embargo, este comando trata los días, no las horas. Tendrías que buscar otro script.

    Saludos
    --
            un extranjero es un amigo que no hemos conocido aún.
    0
  2. Sulyvan77 Mensajes publicados 3 Estado Miembro
     
    Hola y gracias por tu respuesta,

    Después de investigar he logrado hacer un script funcional para los días, pero para las horas sigo en la búsqueda con bastante dificultad. Aquí está mi prueba:

     
    @ECHO OFF
    REM INICIO DEL SCRIPT

    REM MOSTRAR HORA Y MINUTOS

    for /f "tokens=1,2,3 delims=:" %%a in ('time /t') do set hora=%%a
    for /f "tokens=1,2,3delims=:" %%a in ('time /t') do set minuto=%%b
    echo Hora : %hora%
    echo Minuto : %minuto%

    REM ///////CREAR CARPETA CONTENIENDO HORAS Y MINUTAS

    REM ///////echo Prueba > archivo_%hora%%minuto%.txt

    pause

    REM VARIABLES DE TIEMPO Y CARPETAS
    REM DIRECTORIO QUE CONTIENE NUESTROS ARCHIVOS
    SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1

    REM NÚMERO MÁXIMO DE DÍAS DE CONSERVACIÓN
    SET HMAX=%time~0,2%

    pause

    REM ELIMINAR LOS ARCHIVOS
    forfiles /P %REPDOSS% /m *.* /D -%HMAX% /C "cmd /c del /q @path"

    pause
    REM ///// PRUEBA
    REM /////ForFiles /P "%REPDOSS%" /D -%JOURMAXS% /C "CMD /C if @ISDIR==TRUE echo RD /Q /S @FILE &RD /Q /S @path"

    REM MOSTRAR UN MENSAJE DESPUÉS DE LA SUPRESIÓN

    echo Msgbox "El script se ha ejecutado correctamente y sus archivos han sido eliminados."
    pause
    0
  3. Sulyvan77 Mensajes publicados 3 Estado Miembro
     
    Y aquí está el que funciona,

     @ECHO OFF REM INICIO DEL SCRIPT 

    REM VARIABLES TIEMPO Y CARPETAS
    REM DIRECTORIO QUE CONTIENE NUESTROS ARCHIVOS
    SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1
    REM NÚMERO MÁXIMO DE DÍAS DE CONSERVACIÓN
    SET JOURMAX=1

    REM ELIMINA LOS ARCHIVOS
    forfiles /P %REPDOSS% /m *.* /D -%JOURMAX% /C "cmd /c del /q @path"
    pause

    REM ELIMINAR LAS CARPETAS
    REM ForFiles /P "%REPDOSS%" /D -%JOURMAXS% /C "CMD /C if @ISDIR==TRUE echo RD /Q /S @FILE &RD /Q /S @path"

    PAUSE
    0
  4. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
     
    Hola,

    He tomado tu código para eliminar archivos/ carpetas más viejos que 1 día, luego he creado el código para eliminar los que son más viejos que 3 horas:

    @echo off
    setlocal enableextensions enabledelayedexpansion
    chcp 1252 >nul

    REM DIRECTORIO QUE CONTIENE NUESTROS ARCHIVOS
    SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1

    REM NÚMERO MÁXIMO DE DÍAS DE CONSERVACIÓN
    SET JOURMAX=1

    cd /d %REPDOSS% || exit /b 1

    REM ELIMINA LOS ARCHIVOS
    forfiles /D -%JOURMAX% /C "cmd /c if @ISDIR==FALSE (del /f /q @file)"

    REM ELIMINAR LAS CARPETAS
    forfiles /D -%JOURMAX% /C "cmd /c if @ISDIR==TRUE (rd /Q /S @file)"

    PAUSE

    :: OBTENER LA HORA ACTUAL Y TRANSFORMARLA EN MINUTOS
    for /f "tokens=1,2,3 delims=:" %%a in ('time /t') do (
    set H_actuelle=%%a
    set M_actuelle=%%b

    if !H_actuelle! LSS 10 (set H_actuelle=!H_actuelle:~-1!)
    if !M_actuelle! LSS 10 (set M_actuelle=!M_actuelle:~-1!)

    set /a total_actuelle=!H_actuelle!*60+!M_actuelle!
    )

    pause

    :: LISTAR LOS ARCHIVOS Y CARPETAS
    for /f "delims=" %%K in ('dir /b') do (

    :: OBTENER LA HORA PARA CADA ARCHIVO/CARPETA
    for /f "skip=5 tokens=1,2,3,* delims=: " %%A in ('2^>nul dir "%%~K" ^| findstr /v "octets"') do (
    set heure=%%B
    set minute=%%C

    :: TRANSFORMAR LA HORA EN MINUTOS
    if !heure! LSS 10 (set heure=!heure:~-1!)
    if !minute! LSS 10 (set minute=!minute:~-1!)

    set /a total_fichier=!heure!*60+!minute!

    :: DETERMINAR LA DIFERENCIA Y ELIMINAR ARCHIVOS/CARPETAS DEMASIADO VIEJOS
    set /a ecart=!total_actuelle!-!total_fichier!

    if !ecart! GTR 180 (2>nul rd /s /q "%%~K" || del /f "%%~K")
    if !ecart! LSS -1440 (2>nul rd /s /q "%%~K" || del /f "%%~K")
    if !ecart! LSS 0 (if !ecart! GTR -1260 (2>nul rd /s /q "%%~K" || del /f "%%~K"))
    )
    )
    pause

    exit /b 0


    “La inteligencia artificial se define como lo contrario de la estupidez natural.”
    0
    1. barbabe0057
       
      Hola, ¿les funcionó a ustedes? ¡Porque a mí no me funciona!
      0
      1. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > barbabe0057
         
        Hola,

        Si necesita ayuda, debe describir su problema con precisión, no basta con decir que no funciona.

        ¿Qué parte del script no funciona? ¿La primera parte que elimina archivos/carpeta de más de 1 día o la segunda parte que elimina archivos/carpeta de más de 3 horas?

        ¿Su problema se refiere a archivos, a carpetas o a ambos?
        0
      2. Ludo777 > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
         

        Hola,

        En mi caso, eso me borra todos los archivos y me indica en el símbolo del sistema "operador faltante."

        ¿Tienes alguna idea?

        De lo contrario, el comando forfiles para 1 día funciona perfectamente, qué lástima que no se pueda hacer menos de un día.

        0
      3. brucine Mensajes publicados 24984 Fecha de registro   Estado Miembro Última intervención   4 181 > Ludo777
         

        Hola,

        Seguramente has copiado mal la fórmula de barnane0057, en quien confío plenamente a este respecto.

        Ten en cuenta que el Batch Dos maneja muy mal todo lo relacionado con las fechas, existen un montón de soluciones alternativas, la más sencilla sin utilizar herramientas de terceros es a través de PowerShell:

        https://stackoverflow.com/questions/74026069/how-to-delete-all-files-last-modified-more-than-5-minutes-ago

        0