Repete um programa em loop

2

Estou usando o Windows 10 Professional. Eu quero criar um arquivo em lotes:

  1. que abre o navegador Firefox,
  2. navega para uma página
  3. fecha o navegador depois de um minuto.
  4. Repita os passos 1 a 3.

Eu descobri o seguinte código até agora para escrever no meu arquivo de lote:

@echo off
start "C:\Program Files\Mozilla Firefox\firefox.exe" "http://testmywebsiteloadspeed.com"
ping -n 1 -w 60 

Mas isso não está fazendo nada. Também como alcançar 3 & 4?

    
por CuriousDev 16.07.2018 / 17:59

1 resposta

5

Usando GOTO

Tente o seguinte lote:

@echo off
set loopCount=50
:loop
start "C:\Program Files\Mozilla Firefox\firefox.exe" "http://testmywebsiteloadspeed.com"
set /a loopCount=%loopCount%-1
if %loopCount%==0 GOTO:EOF
timeout /t 60
taskkill /im firefox.exe
timeout /t 5
GOTO :loop
  • :loop define um GOTO point.
  • timeout /t 60 espera por 60 segundos
  • taskkill /im firefox.exe vai matar o processo do Firefox
  • GOTO :loop será redirecionado de volta para o início do script.

Nota: Isso eliminará todos os processos do Firefox em execução. Eu acho que o Firefox geralmente só permite um de cada vez.

Loop finito usando GOTO

Para fazer isso para um número específico de iterações, você pode usar set /a para fazer alguma matemática em uma variável loopCount.

@echo off
set loopCount=50
:loop
start "C:\Program Files\Mozilla Firefox\firefox.exe" "http://testmywebsiteloadspeed.com"
set /a loopCount=%loopCount%-1
if %loopCount%==0 GOTO:EOF
timeout /t 60
taskkill /im firefox.exe
timeout /t 5
GOTO :loop

A linha set /a loopCount=%loopCount%-1 reduzirá o valor de loopCount por um a cada vez que o loop for executado. A linha if %loopCount%==0 GOTO:EOF sairá do script quando atingir 0.

GOTO:EOF significa "ir para o final do arquivo", o que irá ignorar qualquer outro código no arquivo.

Usando FOR /l

Uma solução alternativa seria usar um loop FOR com a opção /l , mas tive problemas com isso ao usar loops aninhados, então, geralmente, fico com a opção GOTO de arquivos Batch simples, como isto. Ainda assim, espero que isso ajude alguém no futuro.

@echo off
for /l %%x in (1, 1, 50) do (
    start "C:\Program Files\Mozilla Firefox\firefox.exe" "http://testmywebsiteloadspeed.com"
   set /a loopCount=%loopCount%-1
   if %loopCount%==0 GOTO:EOF
   timeout /t 60
   taskkill /im firefox.exe
   timeout /t 5
)

Para dividir o comando FOR /l :

  • O primeiro argumento é onde você começa.
  • O segundo argumento é o tamanho de um passo a ser dado. (Isso não é relevante para o seu exemplo específico, já que você não usa o valor.)
  • O terceiro argumento é quando parar.
por 16.07.2018 / 18:11