Zrób coś co 10 sekund plik wsadowy

24

Mam plik wsadowy:

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

Jak mogę wykonać te dwa polecenia w systemie Windows XP co 10 sekund?

quack quixote
źródło
3
Możesz użyć Zaplanowanych zadań systemu Windows, aby obniżyć go do jednej minuty.
jest to możliwe w pakiecie Windows: patrz moje rozwiązanie poniżej. jedynym problemem jest użycie procesora ...
kokbira

Odpowiedzi:

36

to daje 10 sekund. opóźnienie:

timeout /t 10

więc spróbuj tego:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop
Tony
źródło
1
Prawidłowa odpowiedź dla dowolnej wersji systemu Windows wykonanej w ostatniej dekadzie (w tym dla systemu Windows XP określonego w pytaniu). Dzięki :-)
woot
W rzeczywistości czeka -1 - 99 999 sekund (~~ 1 dzień3,7h | windows7) - numer określony w /tOR dla naciśnięcia dowolnego klawisza - który można wyłączyć wysyłając /NOBREAKparametr :)
jave.web 30.10.16
19

Spróbuj tego:

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

Polecenie ping będzie wykonywane przez 10 sekund, a wszystkie dane wyjściowe zostaną przekierowane do urządzenia NUL, co oznacza, że ​​nie zobaczysz żadnych danych wyjściowych z polecenia ping. Działa to rzeczywiście tak, jak komenda „uśpienia”.

Bruno Reis
źródło
11
:top
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
sleep 10
goto top

Edycja: Jak wspomniano w komentarzach, SLEEPnie będzie dostępna w normalnej instalacji. Będziesz potrzebować czegoś takiego jak Windows 2003 Resource Kit lub innej sztuczki, aby to zasymulować (sztuczka ping, o której wspomina Bruno), a notatki na ten temat można znaleźć tutaj .

Doug Kavendek
źródło
6
tryb uśpienia nie jest domyślnie uwzględniony. Potrzebujesz zestawu zasobów lub czegoś takiego?
marcc
Czego dokładnie potrzebuję?
To nie jest Mógłbym przysiąc, że to było coś, na co mogłem liczyć, ale myślę, choiceże może nie być zawarte w standardzie. Przyjrzę się temu więcej.
1
Nie trzeba instalować niczego innego w systemie Windows, aby „sfałszować” polecenie uśpienia. Spójrz na moją odpowiedź na przykład.
1

Bardziej precyzyjne rozwiązanie uruchom ping nieistniejącego hosta i ustaw limit czasu

ping 1.0.0.0 -n 1 -w 10000> nul

Ale generuje ruch pasożytów

Michaił Moskalev
źródło
1

Możesz użyć poleceń fori 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
)

Możesz użyć, ping -n [secs+1] localhost >nulaby poczekać określony czas w sekundach.

Hayz
źródło
1
Dlaczego jest to lepsze niż dokładnie to samo polecenie ping zasugerowane w innej odpowiedzi?
RalfFriedl
Szczerze mówiąc, jest to pierwsza odpowiedź, która pokazuje, jak wykonać nieskończoną pętlę bez użycia goto.
Scott
0

Oszukać:

Użyj tego polecenia, aby wstrzymać partia na 10 sekund

wybór / n / t: c, <10> / c: cc

Teraz umieść go w niekończącej się pętli w partii i voilà!

Dan McGrath
źródło
1
Lub, jeśli chcesz, pobierz zestaw zasobów lub napisz prosty program do uśpienia 10. Moja metoda oznacza jednak, że możesz przenieść go na inną maszynę bez konieczności ponownego pobierania dodatkowego oprogramowania.
Nie sądziłem, że choiceprzyszedł z XP i później, a przynajmniej nie widziałem go w żadnych ostatnich instalacjach.
1
Używam waniliowej Vista Home Premium na tym laptopie i działa dobrze.
dla Windows XP nie ma „wyboru” !!!
kokbira
0

Zainstaluj Cygwin, który udostępni sleepi cronudostępni Ci (między innymi).

tłum
źródło
2
Przesada za to, o co prosi!
-1

poniżej, jest to zarówno brzydki, jak i piękny sposób, plik wsadowy Windows - zajmuje dużo czasu procesora, aby nic nie robić, ale robi to, co chcesz i jest tak miły.

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
źródło
innym sposobem jest wykonanie sekwencji pętli, na przykład powtarzanie (dla / l %% i w (1,1,65535) nie ustawia nic = 0) czasami i „kalibrowanie” „ile razy” trzeba powtórzyć wynik w 10 sekund, hahaha. ale to jest najbrzydszy sposób.
kokbira
można też tworzyć jakąś partię systemu Windows do korzystania jako funkcji czasu (od jednego do Splitu, jeden zrobić oczekiwania ...), ale będzie to bardziej skomplikowane ...
kokbira
Myślę, że spowoduje błąd, jeśli używasz go od 23:59:51 do 23:59:59 - w takim przypadku partia będzie czekać wiecznie ... trochę „jeśli” rozwiązałoby problem ...
kokbira
jeśli chcesz testować przez ustalony czas (nie czas + 10 sekund), możesz po prostu zrobić „jeśli% time% geq 10:30 mam goto”. rozwiązanie stało się skomplikowane, ponieważ suma ...
kokbira
To jest naprawdę okropne. Przede wszystkim zajęty czekaniem. niepotrzebne marnowanie cykli procesora nigdy nie jest dobrym pomysłem (chyba że na wbudowanym sprzęcie). To również nie działa poprawnie około północy.
Joey,