
45157
13.03.2007, aktualisiert am 14.03.2007
String-Operationen in For-Schleife?
Hallo zusammen,
ich bin neu hier und mein Name ist Programm ;)
Folgende Frage zu String-Operationen und For-Schleifen:
Hier bekomme ich wunschgemäß die Zeile "G_Citrix_OffPro" in mein Textfile geschrieben:
SET start=3
SET length=-50
SET string=CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
CALL SET substring=%%string:~%start%,%length%%%
echo %substring% >> Auswertung2.txt
Hier jedoch, mit For-Schleife, wird jeweils nur "ECHO ist eingeschaltet (ON)." ausgegeben
FOR /F "tokens=*" %%G IN ('dir/b ^"MeinPfad\*.*^"') DO (
SET string= CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
CALL SET substring=%%string:~%start%,%length%%%
echo %substring% >> Auswertung3.txt
)
Dabei geht es mir nicht um die Formulierung der For-Schleife, die wohl funktioniert, sondern um die Ausgabe.
Und mit der viel zitierten Variante "Setlocal EnableDelayedExpansion" hat es wohl auch nix zu tun, oder?.
Kann mir das jemand erklären?
Danke schonmal, Julian
ich bin neu hier und mein Name ist Programm ;)
Folgende Frage zu String-Operationen und For-Schleifen:
Hier bekomme ich wunschgemäß die Zeile "G_Citrix_OffPro" in mein Textfile geschrieben:
SET start=3
SET length=-50
SET string=CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
CALL SET substring=%%string:~%start%,%length%%%
echo %substring% >> Auswertung2.txt
Hier jedoch, mit For-Schleife, wird jeweils nur "ECHO ist eingeschaltet (ON)." ausgegeben
FOR /F "tokens=*" %%G IN ('dir/b ^"MeinPfad\*.*^"') DO (
SET string= CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
CALL SET substring=%%string:~%start%,%length%%%
echo %substring% >> Auswertung3.txt
)
Dabei geht es mir nicht um die Formulierung der For-Schleife, die wohl funktioniert, sondern um die Ausgabe.
Und mit der viel zitierten Variante "Setlocal EnableDelayedExpansion" hat es wohl auch nix zu tun, oder?.
Kann mir das jemand erklären?
Danke schonmal, Julian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 53967
Url: https://administrator.de/forum/string-operationen-in-for-schleife-53967.html
Ausgedruckt am: 18.05.2025 um 10:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo VieleFragen und willkommen im Forum!
Ich hätte auch gleich eine Frage: Was hast Du eigentlich mit der "for"-Schleife vor? In der aktuellen Fassung wird nämlich die Laufvariable "%%G" überhaupt nicht verwendet.
Ansonsten läuft es sehr wohl auf "Setlocal EnableDelayedExpansion" hinaus - immer, wenn innerhalb einer "for"-Schleife der Wert einer Variablen nicht nur verändert, sondern dieser veränderte Wert auch ausgelesen werden muss, benötigst Du die "verzögerte Auflösung".
In Deinem Fall würde das bedeuten, dass Du "!string!" und "!substring!" schreiben musst ("%start%" und "%length%" können wie gehabt verwendet werden, da sie bereits vor der Schleife definiert und innerhalb nicht verändert werden).
Noch zwei Anmerkungen:
Das "CALL" in der "SET substring"-Zeile ist überflüsssig und das Maskieren (mit "^") der Anführungszeichen kann ich nicht nachvollziehen.
HTH
bastla
Ich hätte auch gleich eine Frage: Was hast Du eigentlich mit der "for"-Schleife vor? In der aktuellen Fassung wird nämlich die Laufvariable "%%G" überhaupt nicht verwendet.
Ansonsten läuft es sehr wohl auf "Setlocal EnableDelayedExpansion" hinaus - immer, wenn innerhalb einer "for"-Schleife der Wert einer Variablen nicht nur verändert, sondern dieser veränderte Wert auch ausgelesen werden muss, benötigst Du die "verzögerte Auflösung".
In Deinem Fall würde das bedeuten, dass Du "!string!" und "!substring!" schreiben musst ("%start%" und "%length%" können wie gehabt verwendet werden, da sie bereits vor der Schleife definiert und innerhalb nicht verändert werden).
Noch zwei Anmerkungen:
Das "CALL" in der "SET substring"-Zeile ist überflüsssig und das Maskieren (mit "^") der Anführungszeichen kann ich nicht nachvollziehen.
HTH
bastla
Moin VieleFragen,
auch von mir ein Willkommen im Forum.
Meine Ergänzung zu bastla's ausführlichen Hinweisen:
- Teste lieber erstmal kleinere Häppchen vom CMD-Prompt, bevor Du mehrfach kunstvoll ineinandergeschraubte FOR-Anweisungen sich spielerisch umtanzen lässt.
Für das Verständnis von DelayedExpansion genügt ein einfacheres Beispiel.
Z.B. am CMD-Prompt:
Kompliziert wird es von alleine...
Gruss
Biber
auch von mir ein Willkommen im Forum.
Meine Ergänzung zu bastla's ausführlichen Hinweisen:
- Teste lieber erstmal kleinere Häppchen vom CMD-Prompt, bevor Du mehrfach kunstvoll ineinandergeschraubte FOR-Anweisungen sich spielerisch umtanzen lässt.
Für das Verständnis von DelayedExpansion genügt ein einfacheres Beispiel.
Z.B. am CMD-Prompt:
set string= CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
set drei=3
@echo [Ausgabe] %String:~!drei!,50%
[Ausgabe] %String:~3,50%
@echo [Ausgabe] !String:~%drei%,50!
[Ausgabe] =G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,D
for /L %i in (1,1,32) do @echo !String:~%i,50!
CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX
N=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,
=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,D
G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC
_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=
Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=x
itrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xx
trix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx
rix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,
ix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,D
x_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC
_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=
OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=i
ffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=in
fPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int
Pro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.
ro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.t
o,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.tx
,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
U=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
itrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
trix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
rix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
ix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
x,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
U=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt
Gruss
Biber
@Biber
Vielleicht solltest Du dazu sagen, dass bei Dir defaultmäßig "enabledelayedexpansion" gesetzt ist, sonst wird's vom Prompt nicht nachvollziehbar sein.
Grüße
bastla
Vielleicht solltest Du dazu sagen, dass bei Dir defaultmäßig "enabledelayedexpansion" gesetzt ist, sonst wird's vom Prompt nicht nachvollziehbar sein.
Grüße
bastla
Hallo VieleFragen!
Also schrittweise:
Deine derzeitige Schleife wird natürlich lauter gleiche Zeilen produzieren - eine je (Text-)Datei - aber als erster Schritt müsste das etwa so aussehen:
Zum Thema "Maskieren":
Jedes Zeichen, das in einer Batchdatei eine besondere Funktion erfüllt, muss zum bloßen Ausgeben (als einzelnes Zeichen ohne Sonderbedeutung) mit "^" eingeleitet werden - dies betrifft insbesondere "<", ">", "|" und "&". Anführungszeichen werden (neben dem allgemein bekannten Zweck) zum "Zusammenhalten" von Informationen benötigt (vor allem bei Dateinamen / Pfaden, die Leerzeichen enthalten, da Letztere ansonsten als Trennzeichen interpretiert würden).
Hope That Helps
bastla
Also schrittweise:
Deine derzeitige Schleife wird natürlich lauter gleiche Zeilen produzieren - eine je (Text-)Datei - aber als erster Schritt müsste das etwa so aussehen:
@echo off & setlocal enabledelayedexpansion
SET start=3
SET length=-50
FOR /F "tokens=*" %%G IN ('dir/b "MeinPfad\*.*"') DO (
SET "string= CN=G_Citrix_OffPro,OU=Citrix,OU=XXX-Gruppen,OU=XXX,DC=xxx,DC=int.txt"
SET substring=!string:~%start%,%length%!
echo !substring! >> Auswertung3.txt
)
Zum Thema "Maskieren":
Jedes Zeichen, das in einer Batchdatei eine besondere Funktion erfüllt, muss zum bloßen Ausgeben (als einzelnes Zeichen ohne Sonderbedeutung) mit "^" eingeleitet werden - dies betrifft insbesondere "<", ">", "|" und "&". Anführungszeichen werden (neben dem allgemein bekannten Zweck) zum "Zusammenhalten" von Informationen benötigt (vor allem bei Dateinamen / Pfaden, die Leerzeichen enthalten, da Letztere ansonsten als Trennzeichen interpretiert würden).
Hope That Helps
bastla