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.
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
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).
Também pode utilizar timeout
.
Aqui está um exemplo:
@echo off
echo Hi
timeout /t 1 /nobreak > nul
/t
não é obrigatório1 é 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.