função de latência num programa em lote

estou a criar um ficheiro em lote para executar um programa no meu ambiente de trabalho xyz.exe durante 4 horas, depois fecha-o durante 1 hora e repete o processo. Aqui está o meu guião.

:a
START C:\Users\Mukul\Desktop\xyz.exe
SLEEP 14400
taskkill /F /IM xyz.exe
SLEEP 3600
goto :a

de acordo com Aqui, o script deve esperar. Também diz:

SLEEP 10

vai atrasar a execução do próximo comando em 10 segundos. então {[3] } deve atrasar a execução em 4 horas.

resultados actuais: O próximo comando será executado assim que o primeiro comando terminar.

resultados desejados: Proximo o comando deve esperar 4 horas antes de executar o último comando.

Author: SteveFest, 2016-08-13

3 answers

O comando SLEEP pode não ser suportado pela sua versão para Windows. Tente isto:

:a
START C:\Users\Mukul\Desktop\xyz.exe
TIMEOUT 14400
taskkill /F /IM xyz.exe
TIMEOUT 3600
goto :a
 4
Author: sambul35, 2016-08-13 19:00:40

Primeiro, Bash e Batch são línguas muito diferentes.
Agora, a resposta.
Eu prefiro o comando ping sobre o comando sleep, Pois é fácil mudar entre segundos e milisegundos:

ping -n 11 127.0.0.1>nul

Esse comando pára durante 10 segundos e depois recomeça.
Ou:

ping 1.1.1.1 -n 1 -w 10001 >nul

Que também pára por 10 segundos, mas em milisegundos.

Ambos podem ser adaptados em:

:a
start C:\Users\Mukul\Desktop\xyz.exe
ping -n 14401 127.0.0.1>nul
taskkill /F /IM xyz.exe
ping -n 3601 127.0.0.1>nul
goto a

DISCLAIMER : I have NOT tried the final piece of code (porque eu não tenho 4 horas extras para fazer algo).

 6
Author: ender_scythe, 2016-08-13 19:33:03

Também pode utilizar timeout.

Aqui está um exemplo:

@echo off
echo Hi
timeout /t 1 /nobreak > nul
  • /t não é obrigatório

  • 1 é a quantidade de segundo (s) a esperar

  • /nobreak garante que o utilizador não pode saltar a espera

  • > nul redirecciona a saída para nada, para que não vejas nada.

 4
Author: LeoDog896, 2017-09-23 05:46:27