lefg 276 Geschrieben 3. Mai 2008 Melden Teilen Geschrieben 3. Mai 2008 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 Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 3. Mai 2008 Melden Teilen Geschrieben 3. Mai 2008 Hallo Edgar, ich weiß nicht genau ob ich das richtig verstehe - falls ja könntest Du z.b. ein "sleep 30" einbauen anstatt der Sprungmarke. Viele Grüße olc Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 3. Mai 2008 Autor Melden Teilen Geschrieben 3. Mai 2008 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 5. Mai 2008 Autor Melden Teilen Geschrieben 5. Mai 2008 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. Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 5. Mai 2008 Melden Teilen Geschrieben 5. Mai 2008 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 5. Mai 2008 Autor Melden Teilen Geschrieben 5. Mai 2008 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 Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 5. Mai 2008 Melden Teilen Geschrieben 5. Mai 2008 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 5. Mai 2008 Autor Melden Teilen Geschrieben 5. Mai 2008 Ich danke dir. Gruß Edgar Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.