Cerrar y reiniciar un proceso después de un determinado período de tiempo en lote

Estoy tratando de hacer un archivo de lotes que abre un determinado exe y luego, después de (por ejemplo) 5 minutos, cierra entonces lo vuelve a abrir. He intentado esto:

@echo off
:loop
cd /d %~dp0
certain exe
timeout /t "time"  (by minutes)
taskkill /f /im "certain exe"
goto loop

Pero no cerraría el exe ni lo abriría, ¿qué puedo hacer?

Pregunta hecha hace 3 años, 4 meses, 25 días - Por quantumcoder403a


3 Respuestas:

  • El problema es que cmd esperará a que el comando actual termine antes de ejecutar el siguiente comando, por lo que el timeout (y taskill) no será ejecutado hasta el ejemplo. exe cierra por sí mismo.

    Para asegurar que el cmd no espere ejemplo. exe, tendrás que usar start /B, como en este ejemplo:

    @echo off
    :loop
    start /B "example.exe"
    ping -n seconds_of_delay+1 127.0.0.1>nul
    taskkill /f /im "example.exe"
    goto :loop
    

    Reemplazamiento segundos_de_delay+1 con el número de segundos que desea que el período de tiempo dure más uno.

    /B es necesario porque, sin ella, empezaría a ejecutar ejemplo. exe en una nueva ventana (si quieres eso, simplemente usa start).

    Usé el ping como la forma de crear un retraso del tiempo porque se ha encontrado que consume menos tiempo del procesador que el sueño o el tiempo libre (puedes encontrar más detalles Aquí.).

    Respondida el Dec 20, 2020 a las 23:17 - por pixelpioneerbbb5

    Votos positivos: 0 | Votos negativos: 0

  • Para cerrar y reiniciar un proceso después de un determinado período de tiempo en un archivo por lotes, puedes utilizar el comando timeout de la siguiente manera:

    batch
    @echo off
    :loop
    cd /d %~dp0
    start "" "certain.exe"
    timeout /t 300  /nobreak  //espera 5 minutos
    taskkill /f /im certain.exe
    goto loop
    

    En este código, se inicia el proceso "certain.exe" usando el comando start. Luego, se utiliza timeout /t 300 para esperar 300 segundos (equivalente a 5 minutos). Después de que ha transcurrido el tiempo especificado, se utiliza taskkill para forzar la terminación del proceso "certain.exe". Finalmente, se vuelve al inicio del bucle con goto loop.

    Asegúrate de reemplazar "certain.exe" con el nombre del proceso que deseas controlar. Además, si el nombre del proceso tiene espacios, enciérralo entre comillas dobles.

    Respondida el Dec 21, 2020 a las 23:13 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El comando taskill no funciona porque el nombre del archivo .<strong> no se puede utilizar como argumento. Para solucionar esto, utiliza el nombre del executable sin la extensión .<strong>:

    
    @echo off
    
    :loop
    cd /d %~dp0
    start "Executable_name" Executable.
    timeout /t "time"  (en minuto)
    taskill /f /im "Executable_name"
    goto loop
    

    Respondida el Dec 21, 2020 a las 23:22 - por Gemini

    Votos positivos: 0 | Votos negativos: 0