Jump to content

for-Schleife beenden/abbrechen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Gemeinde,

 

gibt es eine elegante Möglichkeit, die For-Schleife vorzeitig zum Beenden beim Analysieren der Ausgabe eines Befehls?

 

Derzeit benutze ich einen Spung zu einer Marke, mir erscheint das aber grob.

 

for /f "skip=1 tokens=2" %%i in ('net config server') do set srvcomment=%%i & goto :out
:out

 

for /f "tokens=1,2" %%i in ('net config server') do echo %%i | find "Serverbeschreibung" && goto :out
:out

 

 

 

Habt Dank für Aufmerksamkeit und Rat.

 

Edgar

Link zu diesem Kommentar

Hallo olc,

 

ein Sleep wartet ja nur ein Weilchen, dann geht die Bearbeitung ja weiter.

 

Hintergrund ist, mit der Schleife Wert, Text, in eine Variable zu bekommen, in diesem Fall den Serverkommentar und dann die Schleife zu verlassen, abzubrechen. Im Normalfall geht die Bearbeitung bis Textende.

 

Im ersten Beispiel wird bis zur gewünschten Zeile gesprungen mit Skip=1, dann Tokens=2 in die Variable gesetzt und mit dem Sprung die Schleife verlassen. Dieser Jump stört mich ein wenig.

 

Es ist ja nicht schlimm, nur hat sich beim mir im Hirn der Gedanke festgesetzt, ob es nicht eine elegantere Möglichkeit gibt, die Bearbeitung zu beenden.

Ich habe nun nichts zum Beenden der Schleife entdeckt, dafür aber eine elegante Art mit FIND zu arbeiten.

 

for /f "tokens=1,2" %%i in ('net config server ^| find "Serverbeschreibung"') do @set srvcomment=%%j

echo %srvcomment%

 

Bei Axel Hahn finden sich einige interessante Beispiele.

 

Axels Homepage - BATch-Dateien - kleine Tipps

Link zu diesem Kommentar

Es ist nicht die angetrebte Methode, das Ergebnis stellt mich aber zufrieden.

 

for /f "tokens=1,2" %%i in ('net config server ^| findstr "Serverbeschreibung"') do (
@set srvcomment=%%j
) || (
set srvcomment=n/a
)
echo %srvcomment%
\\1Server\netlogon\dsquery computer -name %computername% | \\1server\netlogon\dsmod computer -desc %srvcomment%

pause

 

Die Batch wird auf der WS ausgeführt, liest den eigenen Serverkommentar aus und überträgt ihn ins AD.

Link zu diesem Kommentar

Moin lefg,

 

kleiner Verbesserungsvorschlag für den Fall, dass die "Serverbeschreibung" aus einem Satz mit mehreren Worten besteht und nicht nur aus einem Stichwort:

[Nur die CMD-Prompt-Variante, Eingabezeile hat im Prompt ein ">" vorweg]


(=14:11:55 D:\temp=)
>for /f "tokens=1,*" %i in ('net config server^|findstr "Serverbesrch"^|^| @echo x n/a') do @echo set "srvcomment=%j"
set "srvcomment=n/a"

(=14:12:23 D:\temp=)
>for /f "tokens=1,*" %i in ('net config server^|findstr "Serverbesch"^|^| @echo x n/a') do @echo set "srvcomment=%j"
set "srvcomment=Biber sein Neuer. Inbetriebnahme Sommer 2006 oder war das schon im Frühling?"
[/Code]

 

Grüße

Biber

Link zu diesem Kommentar

Hallo Biber,

 

danke für den Tipp, auf das "Problem" der mehrteiligen Srvcomments bin ich schon gestossen, habe es bisher einfach ignoriert, aktuell sind hier alle Kommentare einteilig. Man weiss ja aber nie, was noch kommt anderenorts.

 

Ich muss gestehen, so richtig durchblicke deinen Satz nicht. Kannst Du mir das bitte erläutern?

 

Gruß

 

Edgar

Link zu diesem Kommentar

Moin lefg,

 

ich versuche es mal..

 

der Serverkommentar, der bei mir eingetragen ist und den ich "abgreifen" will lautet:

...
Serverbeschreibung Biber sein Neuer. Inbetriebnahme Sommer 2006 oder war das schon im Frühling?
[/Code]

Das ist die komplette Zeile, die mit Findstr rausgeflöht wird (wenn sie denn da ist)

 

diese Zeile fasse ich auf als bestehend aus "Token1" und "dem-ganzen-gottverdammten-Rest", oder auf CMDisch:

[Code]
for /f "tokens=1,*" %i in ('net config server^|findstr "Serverbesch" ')...
[/Code]

Und ich sage. Wenn das FindStr scheitert/keine "Serverbeschr" findet, dann soll es mir selbst eine Ausgabe erzeugen mit zwei Token

[Code]
(entweder FindStr)...^|^| @echo x n/a') do ....
[/Code]

Somit kommt rechts vom "DO..." immer ein 2-Token-langer oder 1Token+Rest-langer Satz an.

Diesen verwurste ich mit einem [durch "@echo" angedeuteten] "Set "srvcomment=%%j""

[Code]
@echo set "srvcomment=%j"
[/Code]

.... was im Fehlerfall hierzu führt: "set "srvcomment=n/a""

 

Also eigentlich dasselbe wie Du auch vorgeturnt hast, nur ein bisschen eingedampft.

 

Grüße

Biber

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...