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?


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

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”.


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 .


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


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.


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à!


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).


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

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.