Warum wird der Ping-Befehl in meiner Batch-Datei in einer Schleife ausgeführt?

8

Ich habe in Windows 7 eine BAT-Datei mit der folgenden Zeile erstellt:

PING XXX.XXX.XXX.XXX -t

(XXX ersetzt die tatsächliche IP-Nummer). Wenn ich jedoch auf diese Batchdatei doppelklicke, wird der Ping-Befehl wiederholt in einer Schleife ausgeführt. Ich habe sogar versucht, das in umzubenennen ping.BAT, ping.CMDaber das Ergebnis ist das gleiche.

Ich möchte vermeiden, einen Ping-Befehl über die Eingabeaufforderung zu schreiben, weshalb ich die Batch-Datei erstellt habe. Ich weiß nicht, warum der Ping-Befehl kontinuierlich aufgerufen wird, wenn dieselbe Anweisung in eine Batch-Datei eingefügt wird.

pradeetp
quelle
1
Eigentlich wiederholen oder siehst du es für immer pingen? Denn genau das -tmacht es.
ta.speot.is
ping 127.0.0.1 -t <- von der cmd-Eingabeaufforderung wird wiederholt ausgeführt. und das ist nicht in einer Batch-Datei (getestet in Win XP)
Barlop
Sie sollten den Schalter trotzdem vor den Host stellen. ping -t 127.0.0.1 macht aber das gleiche. und soll. Warum -t verwenden, wenn Sie nicht unendlich wollen, siehe Ping -? Ihre Frage ist also zutiefst seltsam
Barlop
"Ich weiß nicht, warum der PING-Befehl kontinuierlich aufgerufen wird, wenn dieselbe Anweisung in eine Batch-Datei eingefügt wird." <- stehst du dazu?
Barlop
Ich habe immer noch keine Lösung gefunden. Ich sehe, dass der PING-Befehl wiederholt ohne Ergebnis aufgerufen wird.
Pradeetp

Antworten:

15

Es ist ein bisschen unklar, mit welchem ​​Problem Sie genau konfrontiert sind, da Sie keine Ausgabe oder keinen Screenshot von dem bereitstellen, was Ihnen nicht gefällt, aber ich werde die beiden wahrscheinlichsten Probleme erklären, die ich sehe:

Vorausgesetzt, Ihr Skript wird aufgerufen ping.batund sieht folgendermaßen aus:

 ping example.com

dann cmd.exedurchsucht / prüft der Interpreter ( ) die Pfade in der Umgebungsvariablen %PATH%nach etwas, das aussieht ping... und tut dies, indem er jedes Suffix anfügt, von %PATHEXT%dem etwas wie enthält .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC. Also, nur pingvon den ping.batLeads zu einer Suche nach ping.com ping.exe ping.batund so weiter anrufen . Der Dolmetscher findet ein ping.batim aktuellen Arbeitsverzeichnis (Ihr ping.bat) und ruft es auf.

Sie haben hier also eine schöne Rekursion : ping.cmd führt die erste Zeile aus, sucht nach "ping", findet "ping.cmd", führt die erste Zeile aus, sucht nach "ping", findet "ping.cmd", führt aus Die erste Zeile sucht nach "ping" und findet "ping.cmd" ...

Das zweite Problem, das Sie möglicherweise haben, ist Folgendes:

Der Interpreter der Batch-Datei wiederholt normalerweise die Befehle, die Sie in die .bat / .cmd-Datei geschrieben haben. So etwas ping www.superuser.comsieht also so aus:

 C:\Users\XYZ\Desktop>ping www.superuser.com

 Ping wird ausgeführt für superuser.com [64.34.119.12] mit 32 Bytes Daten:
 Antwort von 64.34.119.12: Bytes=32 Zeit=110ms TTL=46
 Antwort von 64.34.119.12: Bytes=32 Zeit=107ms TTL=46

Wenn Sie C:\Users\XYZ\Desktop>ping www.superuser.comdie Ausgabe des Skripts @entfernen möchten, müssen Sie entweder jeder Zeile ein (z. B. '@ping www.superuser.com') im Skript voranstellen oder ein @echo offvor den Befehlszeilen einfügen wollen "leise" ausführen.

TL; DR; Rufen Sie Ihre Bat-Dateien nicht wie vorhandene Programme auf.

Akira
quelle
11

Ich hatte das gleiche Problem,

ping.bat enthielt mehrere Zeilen des Ping-Befehls

ping host1
ping host2
ping host3
...

Die Ausgabe in der cmd-Shell sah wie folgt aus und wurde in einer Schleife bis zum Bruch mit ctrl+ fortgesetztC

c:\ping host1    
c:\ping host1    
c:\ping host1    
c:\ping host1    
c:\ping host1
...

c:\ping host1
^CTerminate batch job (Y/N)?

Um es zu lösen, benennen Sie einfach das um ping.bat, damit es sich nicht in der Batch-Datei aufruft oder ping.exe als Befehl in der Batch-Datei verwendet

ping.exe host1
ping.exe host2
ping.exe host3
...
Stefan
quelle
3

Der Parameter -t macht den Ping kontinuierlich.

Entfernen Sie möglicherweise den Parameter -t und weisen Sie Ihr Batch-Skript an, darauf zu warten, dass Sie die Eingabetaste drücken, bevor Sie den cmd-Bildschirm beenden.

Ich habe seit einiger Zeit keine Fenster mehr benutzt, aber das sollte funktionieren:

ping xxx.xxx.xxx.xxx
pause
exit
n0pe
quelle
-t zu entfernen hat nicht funktioniert. Könnten Sie bitte das Skript posten?
Pradeetp
@pradeetp hat oben einen Code hinzugefügt
n0pe
3

Ich hatte die gleichen Probleme. Hier ist die Auflösung:

Benennen Sie Ihre ping.bat-Datei in pingtest.bat um

Und stellen Sie sicher, dass es enthält:

ping xxx.xxx.xxx.001
ping xxx.xxx.xxx.002
ping xxx.xxx.xxx.003
pause

Auf diese Weise können Sie eine oder mehrere Adressen anpingen und die Ergebnisse auf dem Bildschirm anzeigen. Diese Batchdatei kann von überall auf Ihrem PC ausgeführt werden, indem Sie darauf doppelklicken.

user277896
quelle
1

Die lokale Skriptausführung scheint zu verhindern, dass ping.exe in einem Skript ausgeführt wird. Versuchen Sie, mit der rechten Maustaste zu klicken und "Als Administrator ausführen". Ich suche nach Informationen zum Aktualisieren der Ausführungsrichtlinie.

Gerade als ich dachte, ich wüsste etwas über Windows, haben sie es geändert.


Update: Rekursion ist die Antwort ...

Sie können es nicht ping.bat und ping.exe nennen

Sie können es auch nicht route.bat und route.exe nennen.

Wenn ich z. B. ping.bat ausführe, führen Sie es erneut als pingx.bat aus: Geben Sie hier die Bildbeschreibung ein

mgjk
quelle
1

Rechtsklick - Als Administrator ausführen hat für mich gearbeitet.

Amit Raut
quelle
Ich könnte schwören, dass dies nicht korrekt ist und es getestet hat - und er hat Recht O_O
nixda
-1

Dies liegt daran, dass Sie die Batchdatei so benennen, wie der Ping-Befehl benannt ist. Benennen Sie Ihre Batch-Datei in etwas anderes um. Usw. myping.bat

C1sc0
quelle
-2

Mit anderen Worten, benennen Sie Ihre Batch-Datei nicht (Ping) . Verwenden Sie einen beliebigen anderen Dateinamen. Und der folgende Code funktioniert einwandfrei.

@echo off
PING XXX.XXX.XXX.XXX
pause
Teto
quelle
Diese Antwort ist die gleiche wie die, die Stefan und Akira bereits gegeben haben. Nur kürzer
Nixda