Führen Sie alle 10 Sekunden eine Batch-Datei aus

24

Ich habe eine Batch-Datei:

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

Wie kann ich diese beiden Befehle unter Windows XP alle 10 Sekunden ausführen?

Quacksalber
quelle
3
Sie können Windows Scheduled Tasks verwenden, um den Wert auf einmal pro Minute zu reduzieren.
es ist mit Windows Batch möglich: siehe meine Lösung unten. Das einzige Problem ist die CPU-Auslastung ...
Kokbira

Antworten:

36

das ergibt eine 10 sek. verzögern:

timeout /t 10

Also versuche folgendes:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop
Tony
quelle
1
Die richtige Antwort für jede Windows-Version, die im letzten Jahrzehnt erstellt wurde (einschließlich Windows XP, das in der Frage angegeben ist). Danke :-)
woot
Es wartet tatsächlich -1 - 99 999 Sekunden (~~ 1day3,7h | windows7) - die in /tOR angegebene Zahl zum Drücken einer beliebigen Taste - die durch Senden von /NOBREAKparam :) ausgeschaltet werden kann
jave.web 30.10.16
19

Probier diese:

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

Der Ping-Befehl wird 10 Sekunden lang ausgeführt, und die gesamte Ausgabe wird an das NUL-Gerät umgeleitet. Dies bedeutet, dass Sie keine Ausgabe des Ping-Befehls sehen. Es funktioniert in der Tat wie ein "Schlaf" -Befehl.

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

Bearbeiten: Wie in den Kommentaren erwähnt, SLEEPwird in einer normalen Installation nicht verfügbar sein. Sie benötigen etwas wie das Windows 2003 Resource Kit oder einen anderen Trick, um es zu simulieren (der Ping-Trick, den Bruno erwähnt). Hinweise dazu finden Sie hier .

Doug Kavendek
quelle
6
Schlaf ist nicht standardmäßig enthalten. Benötigen Sie das Resource Kit oder etwas, um dies zu bekommen?
marcc
Was genau brauche ich
Ist es nicht Ich hätte schwören können, dass es etwas war, auf das ich zählen konnte, aber ich denke, dass choicees möglicherweise nicht standardmäßig enthalten ist. Ich werde es mir genauer ansehen.
1
Unter Windows muss nichts anderes installiert werden, um einen Sleep-Befehl zu "fälschen". Schauen Sie sich meine Antwort als Beispiel an.
1

Genauere Lösung Pingen Sie einmal einen nicht vorhandenen Host und legen Sie eine Zeitüberschreitung fest

ping 1.0.0.0 -n 1 -w 10000> nul

Aber es erzeugt Parasitenverkehr

Mikhail Moskalev
quelle
1

Sie können den Befehl forund verwenden 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
)

Mit können Sie ping -n [secs+1] localhost >nuleine bestimmte Zeit in Sekunden warten.

Hayz
quelle
1
Warum ist dies besser als genau der gleiche Ping-Befehl, der in einer anderen Antwort vorgeschlagen wurde?
RalfFriedl
Um fair zu sein, ist dies die erste Antwort, die zeigt, wie man eine Endlosschleife ohne Verwendung von ausführt goto.
Scott
0

Betrügen:

Verwenden Sie diesen Befehl, um den Stapel für 10 Sekunden anzuhalten

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

Legen Sie es jetzt in eine Endlosschleife in der Reihe und voilà!

Dan McGrath
quelle
1
Wenn Sie möchten, können Sie auch das Resource Kit herunterladen oder ein einfaches Programm für den Ruhezustand 10 schreiben. Meine Methode bedeutet jedoch, dass Sie es auf einen anderen Computer verschieben können, ohne erneut mehr Software herunterladen zu müssen.
Ich habe nicht gedacht, dass choiceXP und höher verfügbar sind, oder zumindest habe ich es bei den letzten Installationen nicht gesehen.
1
Auf diesem Laptop läuft Vanilla Vista Home Premium, und es funktioniert einwandfrei.
Es gibt keine "Wahl" für Windows XP !!!
Kokbira
0

Installieren Sie Cygwin , die machen sleepund cronIhnen zur Verfügung (unter anderem).

Mob
quelle
2
Übermaß für das, was er verlangt!
-1

Im Folgenden ist es sowohl eine hässliche als auch eine schöne Art und Weise, eine Windows-Batchdatei - es verbraucht viel CPU-Zeit, um nichts zu tun, aber es tut, was Sie wollen und ist so schön.

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
quelle
Eine andere Möglichkeit besteht darin, eine Schleifensequenz auszuführen, z. B. das Wiederholen (für / l %% i in (1,1,65535) setze nichts = 0) einige Male und "Kalibrieren", "wie oft" Sie das Testen wiederholen müssen Ergebnis in 10 Sekunden, hahaha. aber es ist der hässlichste Weg.
Kokbira
Sie können auch einige Windows-Stapel erstellen, die als Funktionen verwendet werden sollen (eine, um die Zeit zu teilen, eine, um das Warten zu erledigen ...), aber es wird komplexer sein ...
kokbira
Ich denke, es wird einen Fehler verursachen, wenn Sie es von 23:59:51 bis 23:59:59 verwenden - in diesem Fall wird der Stapel für immer warten ... einige "Wenn's" würden das Problem lösen ...
Kokbira
Wenn Sie für eine feste Zeit (keine Zeit + 10 Sekunden) testen möchten, können Sie einfach "if% time% geq 10:30 do goto end" ausführen. Die Lösung wurde komplex, weil die Summe ...
Kokbira
Es ist eigentlich schrecklich. Vor allem beschäftigt warten. Eine unnötige Verschwendung von CPU-Zyklen ist niemals eine gute Idee (außer bei eingebetteter Hardware). Dies scheint auch um Mitternacht nicht richtig zu funktionieren.
Joey