Fai qualcosa ogni 10 secondi di file batch


19

Ho un file batch:

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

Come posso eseguire questi due comandi su Windows XP, ogni 10 secondi?


3
È possibile utilizzare Attività pianificate di Windows per ridurle a una volta al minuto.

è possibile con il batch di Windows: vedi la mia soluzione qui sotto. l'unico problema è l'utilizzo della CPU ...
kokbira

Risposte:


26

questo fa 10 secondi. ritardo:

timeout /t 10

quindi prova questo:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop

1
La risposta giusta per qualsiasi versione di Windows realizzata nell'ultimo decennio (incluso Windows XP specificato nella domanda). Grazie :-)
woot

Attende in realtà -1 - 99 999 secondi (~~ 1day3,7h | windows7) - il numero specificato in /t O per premere qualsiasi tasto - che può essere disattivato inviando /NOBREAK param :)
jave.web

19

Prova questo:

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

Il comando ping verrà eseguito per 10 secondi e tutto l'output verrà reindirizzato al dispositivo NUL, il che significa che non verrà visualizzato alcun output dal comando ping. Funziona davvero come farebbe un comando "sonno".


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

Modificare: Come menzionato nei commenti, SLEEP non sarà disponibile in un'installazione normale. Avrai bisogno di qualcosa come il Resource Kit di Windows 2003, o qualche altro trucco per simularlo (il trucco del ping di Bruno cita), e le note per farlo possono essere trovate Qui .


6
il sonno non è incluso di default. Hai bisogno del kit di risorse o di qualcosa per ottenere questo?
marcc

Di cosa ho bisogno esattamente?

Non lo è? Avrei giurato che era qualcosa su cui potevo contare, ma credo choice potrebbe non essere incluso dallo standard. Lo esaminerò di più.

1
Non è necessario installare nient'altro su Windows per "falsificare" un comando di sospensione. Dai un'occhiata alla mia risposta per un esempio.

1

Una soluzione più precisa esegue il ping di un host inesistente una volta e imposta il timeout

ping 1.0.0.0 -n 1 -w 10000 & gt; nul

Ma genera traffico parassita


0

Truffare:

Utilizzare questo comando per mettere in pausa il batch per 10 secondi

scelta / n / t: c, & lt; 10 & gt; / c: cc

Ora mettilo in un loop infinito nel batch e voilà!


1
Oppure, se lo desideri, scarica il kit delle risorse o scrivi un semplice prog per dormire 10. Il mio metodo, tuttavia, significa che puoi spostarlo su un'altra macchina senza dover scaricare altro software.

Non pensavo choice è arrivato con XP e successivi, o almeno non l'ho visto su nessuna installazione recente.

1
Sto usando vanilla Vista Home Premium su questo laptop e funziona perfettamente.

non c'è "scelta" per windows xp !!!
kokbira

0

Installare Cygwin che farà sleep e cron disponibile per te (tra le altre cose).


2
Overkill per quello che sta chiedendo!

-1

di seguito, è sia un modo brutto e bello, un file batch di Windows - consuma un sacco di tempo della CPU per non fare nulla, ma fa quello che vuoi ed è così bello.

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

un altro modo è fare una sequenza di loop, ad esempio ripetendo (per / l %% i in (1,1,65535) non impostare niente = 0) alcune volte e "calibrando" "quante volte" si deve ripetere il test per risultato in 10 secondi, hahaha. ma è il modo più brutto.
kokbira

puoi anche creare alcuni batch di Windows da usare come funzioni (uno per dividere il tempo, uno per fare l'attesa ...) ma sarà più complesso ...
kokbira

Penso che causerà un bug se lo si utilizza dalle 23:59:51 alle 23:59:59 - in tal caso, il batch attenderà per sempre ... alcuni "se" risolveranno il problema ...
kokbira

se vuoi testare per un tempo fisso (non un tempo + 10 sec) puoi semplicemente fare "se% time% geq 10:30 do goto end". la soluzione è diventata complessa perché la somma ...
kokbira

In realtà è orribile. Prima di tutto, occupato ad aspettare. sprecare inutilmente cicli di CPU non è mai una buona idea (a meno che non sia su hardware embedded). Anche questo non sembra funzionare correttamente intorno a mezzanotte.
Joey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.