Brechen aus in batch
Meine aktuellen Zeile der batch-code ist:
for /L %%a in (8000,1,8100) do netstat /a /n | find "%%a" | find "LISTENING" || set tmp_freeport=%%a && goto found
Die Idee ist noch ein freier port wird verwendet für das hören im Bereich 8000-8100.
Aktuell habe ich den port 8000 in Gebrauch ist, also sollte das script gehen 8001.
Nach der Schleife %tmp_freeport%
gleich 8001, wie es sein sollte, und Ihr Wert wird später verwendet, richtig.
Das problem ist, dass die Schleife weiterläuft, unabhängig. netstat
wird aufgerufen, um die Suche für alle 101 ports in dem Bereich, das ist natürlich inefficent und unerwünscht, denn die Suche muss abgeschlossen sein, bevor das script fortgesetzt werden kann.
Kann mir jemand sagen, wie man aus einer batch-FOR-Schleife?
(Alternativ, wenn es einen besseren Weg zu finden, eine freie Portnummer, bitte Lesen Sie meine etwas Frage)
InformationsquelleAutor Niet the Dark Absol | 2012-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sind richtig, dass eine FOR /L-Schleife "immer wieder" zählt bis zur Fertigstellung. (Gut, tatsächlich gibt es einige drastische Codierung Methoden, die Sie brechen kann, aber keine Notwendigkeit, dorthin zu gehen)
Jedoch, obwohl die Schleife zählt bis zur Fertigstellung, der DO-Klausel wird übersprungen sobald das SPRINGEN FAND Anweisung ausgeführt wurde. Können Sie beweisen, sich selbst durch einfügen
echo testing %%a&
in der Vorderseite Ihres bestehenden DO-Klausel. Sie werden sehen, dass keine zusätzliche Prüfung findet statt, sobald Sie gefunden haben, Ihre freien port.FOR /L Schleife zählt sehr schnell (zumindest von batch-standards), also ich würde nicht sorgen über die extra zählen. Nun, wenn Sie Ihre waren zählen von 1 bis 1 million, dann habe ich könnte sorgen. Bei 10 Millionen bin ich definitiv betroffen.
Kann ich das vereinfachen der vorhandenen Logik ein wenig. Kombinieren Sie die 2 FINDEN Sie Anweisungen zu einer einzelnen FINDSTR mit einem regulären Ausdruck.
Ich bin kein Experte bezüglich IP-Adressen und ports, aber ich bin besorgt, dass Ihre Logik FINDEN kann, werden nicht ausreichen, um Bildschirm für die verwendeten ports. Ich denke, der Suche nach einem Doppelpunkt und einem Leerzeichen nach dem Anschluss wird es zuverlässiger. Auch ich bezweifle, dass Sie sehen wollen, den text der verwendeten ports, so dass ich umgeleitet FINDSTR Ausgabe nach nul.
Hinweis: GOTO :Etikett wird sofort beendet, alle anderen Formen einer FOR-Schleife. Nur die FOR /L-Variante zählt weiter, nachdem die GOTO-Funktion.
8001
.InformationsquelleAutor dbenham
Könnte man nur verwenden, WENN und SPRINGEN statt. So etwas wie:
InformationsquelleAutor Erbert