Haga algo cada 10 segundos archivo por lotes

24

Tengo un archivo por lotes:

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

¿Cómo puedo hacer estos dos comandos en Windows XP, cada 10 segundos?

quijote curandero
fuente
3
Puede usar las tareas programadas de Windows para reducirlo a una vez por minuto.
es posible con el lote de Windows: vea mi solución a continuación. el único problema es el uso de la CPU ...
kokbira

Respuestas:

36

esto hace un 10 seg. retrasar:

timeout /t 10

así que prueba esto:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop
Tony
fuente
1
La respuesta correcta para cualquier versión de Windows realizada en la última década (incluido Windows XP especificado en la pregunta). Gracias :-)
woot
En realidad, espera -1-99999 segundos (~~ 1day3,7h | windows7) - el número especificado en /tOR para presionar cualquier tecla - que se puede apagar enviando /NOBREAKparam :)
jave.web
19

Prueba este:

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

El comando ping se ejecutará durante 10 segundos y toda la salida se redirigirá al dispositivo NUL, lo que significa que no verá ninguna salida del comando ping. Funciona de hecho como lo haría un comando "dormir".

Bruno Reis
fuente
11
:top
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
sleep 10
goto top

Editar: como se menciona en los comentarios, SLEEPno estará disponible en una instalación normal. Necesitará algo como el Kit de recursos de Windows 2003, o algún otro truco para simularlo (el truco de ping que Bruno menciona), y las notas para hacerlo se pueden encontrar aquí .

Doug Kavendek
fuente
66
el sueño no está incluido por defecto. ¿Necesita el kit de recursos o algo para obtener esto?
marcc
¿Qué necesito exactamente?
No lo es? Podría haber jurado que era algo con lo que podía contar, pero supongo choiceque podría no estar incluido de manera estándar. Lo investigaré más.
1
No es necesario instalar nada más en Windows para "falsificar" un comando de suspensión. Mira mi respuesta para ver un ejemplo.
1

Solución más precisa para hacer ping al host inexistente una vez y configurar el tiempo de espera

ping 1.0.0.0 -n 1 -w 10000> nul

Pero genera tráfico de parásitos

Mikhail Moskalev
fuente
1

Puede usar el comando fory ping:

@echo off
for /l %%a in (0,0,0) do (
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
ping -n 11 localhost >nul
)

Puede usar ping -n [secs+1] localhost >nulpara esperar una cierta cantidad de tiempo en segundos.

Hayz
fuente
1
¿Por qué es esto mejor que exactamente el mismo comando ping sugerido en otra respuesta?
RalfFriedl
Para ser justos, esta es la primera respuesta que muestra cómo hacer un bucle infinito sin usar goto.
Scott
0

Engañar:

Use este comando para pausar el lote por 10 segundos

elección / n / t: c, <10> / c: cc

¡Ahora, colóquelo en un bucle interminable en el lote y listo!

Dan McGrath
fuente
1
O, si lo desea, descargue el kit de recursos o escriba un programa simple para dormir 10. Sin embargo, mi método significará que puede moverlo a otra máquina sin tener que descargar más software nuevamente.
No pensé que choicevino con XP y más tarde, o al menos no lo he visto en ninguna instalación reciente.
1
Estoy ejecutando vanilla Vista Home Premium en esta computadora portátil y funciona bien.
¡No hay "elección" para Windows XP!
kokbira
0

Instale Cygwin que hará sleepy cronestará disponible para usted (entre otras cosas).

multitud
fuente
2
¡Exagerado por lo que está pidiendo!
-1

a continuación, es a la vez una forma fea y hermosa, un archivo por lotes de Windows: consume mucho tiempo de CPU para no hacer nada, pero hace lo que quiere y es muy agradable.

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
kokbira
fuente
otra forma es hacer una secuencia de bucle, por ejemplo repitiendo (para / l %% i en (1,1,65535) no establezca nada = 0) algunas veces y "calibrando" "cuántas veces" tiene que repetir la prueba para resultado en 10 segundos, jajaja. Pero es la forma más fea.
kokbira
también puede crear algunos lotes de Windows para utilizar como funciones (uno a tiempo partido, uno para hacer la espera ...) pero será más compleja ...
kokbira
Creo que causará un error si lo está usando de 23:59:51 a 23:59:59 - en ese caso, el lote esperará para siempre ... algunos "si" resolverían el problema ...
kokbira
si desea probar por un tiempo fijo (no un tiempo + 10 segundos) simplemente puede hacer "if% time% geq 10:30 do goto end". la solución se volvió compleja porque la suma ...
kokbira
En realidad es horrible. En primer lugar, ocupado esperando. desperdiciar ciclos de CPU innecesariamente nunca es una buena idea (a menos que sea en un hardware integrado). Esto tampoco parece funcionar correctamente alrededor de la medianoche.
Joey