Faça algo a cada 10 segundos de arquivo em lote

17

Eu tenho um arquivo em lotes:

arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns

Como posso fazer esses dois comandos no Windows XP a cada 10 segundos?

    
por quack quixote 07.11.2009 / 01:14

7 respostas

24

isto faz 10 seg. atraso:

timeout /t 10

então tente isso:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop
    
por 17.03.2014 / 23:07
19

Tente este:

:loop
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
ping localhost -n 11 > nul
goto loop

O comando ping será executado por 10 segundos e toda a saída será redirecionada para o dispositivo NUL, o que significa que você não verá saída do comando ping. Funciona de fato como um comando "sleep" faria.

    
por 07.11.2009 / 01:28
11
:top
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
sleep 10
goto top

Editar: Conforme mencionado nos comentários, SLEEP não estará disponível em uma instalação normal. Você precisará de algo como o Windows 2003 Resource Kit, ou algum outro truque para simulá-lo (o truque de ping mencionado por Bruno), e notas para fazer isso podem ser encontradas aqui .

    
por 07.11.2009 / 01:19
1

Solução mais precisa: pingar o host inexistente uma vez e definir o tempo limite

ping 1.0.0.0 -n 1 -w 10000 >nul

Mas gera tráfego parasita

    
por 07.11.2009 / 01:48
0

Cheat:

Use este comando para pausar o lote por 10 segundos

escolha / n / t: c, < 10 > / c: cc

Agora, coloque-o em um loop interminável no lote e voilà!

    
por 07.11.2009 / 01:21
0

Instale o Cygwin que disponibilizará sleep e cron (entre outras coisas).

    
por 07.11.2009 / 01:22
-1

abaixo, é uma maneira feia e bonita, um arquivo de lote do Windows - ele consome muito tempo de CPU para não fazer nada, mas faz o que você quer e é tão bom.

SETLOCAL EnableDelayedExpansion

::in seconds
set time2stop=10

:loop1
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns

for /f "tokens=1,2* delims=:" %%i in ("!time!") do (
  set hour1=%%i
  set min1=%%j
  set sec1=%%k
)

for /f "tokens=1* delims=," %%i in ("!sec1!") do (
  set isec1=%%i
)

:loop2

for /f "tokens=1,2* delims=:" %%i in ("!time!") do (
  set hour2=%%i
  set min2=%%j
  set sec2=%%k
)

for /f "tokens=1* delims=," %%i in ("!sec2!") do (
  set isec2=%%i
)

set /a delta=3600*(!hour2!-!hour1!)+60*(!min2!-!min1!)+(!isec2!-!isec1!)
if !delta! geq !time2stop! goto end2

goto loop2

:end2

@echo on

goto loop1
    
por 25.04.2011 / 22:03

Tags