halo7one
Goto Top

bei for f delims-x werden for-befehle nur 1x ausgefuert?!?

ein einfaches for /f "delims=," %%i in ("%var%") do echo %var%
geht nicht... was mache ich falsch?

Guten Tag miteinander,
ich habe ein Problem das für mich, auch wenn ich mich mit for noch nicht soo gut auskenne, als einzige logische Erklärung ein Bug sein kann (auch dann bitte Lösungsvorschläge face-smile

Ich gehe der Einfachheit halber mal von der Beschreibung des for-Befehls aus:
FOR /F ["Optionen"] %Variable IN ("Zeichenkette") DO Befehl [Parameter]  

nun soll das ganze so aussehen:
SETLOCAL EnableDelayedExpansion
set "option=1,2,3"  
for /f "delims=," %%i in ("%option%") do echo %%i  
pause
doch es wird nur ein echo ausgeführt, wenn auch dieses richtig. Was ist denn bitte an diesem simplen code falsch?

Ich weiß mir wirklich keinen Rat mehr und verzweifle noch daran X(

Also: HILFE!

ach ja hier noch meine Ausgabe (Zitat):
E:\Desktop>SETLOCAL EnableDelayedExpansion

E:\Desktop>set "option=1,2,3"

E:\Desktop>for /F "delims=," %i in ("1,2,3") do echo %i

E:\Desktop>echo 1
1

E:\Desktop>pause
Drücken Sie eine beliebige Taste . . .
(Zitat ende)

MfG, halo7one

Content-Key: 89457

Url: https://administrator.de/contentid/89457

Printed on: April 25, 2024 at 11:04 o'clock

Member: miniversum
miniversum Jun 09, 2008 at 19:38:04 (UTC)
Goto Top
Das ist kein bug das stimmt so.
Du hast eine Zeichenkette die "1,2,3" lautet.
Diese teilst du in einzelne Teile auf, die durch ein "," getrennt sind. Der erste Teil steht in dem %%i dann.

Was du denke ich möchtest würdest du hiermit erreichen:
SETLOCAL EnableDelayedExpansion
set "option=1 2 3"  
for %%i in (%option%) do echo %%i
pause

miniversum
Member: bastla
bastla Jun 09, 2008 at 21:06:14 (UTC)
Goto Top
@miniversum

Nur als Anmerkung: Deine Variante würde auch mit
set "option=1,2,3"  
funktionieren ...

Grüße
bastla
Member: halo7one
halo7one Jun 10, 2008 at 14:57:30 (UTC)
Goto Top
Hmm, erstmal danke für die schnellen Antworten.

Doch nun müsst ihr mir das doch etwas mehr verdeutlichen:
Mit delims gebe ich also nur die Trennzeichen an, falls ich den Zeichensatz in mehrere Tokens unterteilen will, oder wie?
Kann man denn auch die Platzhalter (nicht Trennzeichen) bestimmen?
Wenn nicht, dann würde ich gerne wissen, was alles die vordefinierten Platzhalter sind.

Nur des Interesses halber: kann man denn auch jedes Zeichen eines Satzes (z.B. "123") einzeln auswerten lassen, ein "," einfügen oder ähnliches was diesen Zweck erfüllen würde?
Member: miniversum
miniversum Jun 10, 2008 at 15:20:50 (UTC)
Goto Top
Mit delims gebe ich also nur die Trennzeichen an, falls ich den Zeichensatz in mehrere Tokens unterteilen will, oder wie?
Ja genau.
Delims sagt was das Trennzeichen ist udn mit tokens kanst du angeben welche Teile in den Variabeln stehen. Würdest du also z.B. tokens="2,3" angeben würde in %%i 2 und in %%j 3 stehen.

Was meinst du mit Platzhalter?

Nur des Interesses halber: kann man denn auch jedes Zeichen eines Satzes (z.B. "123") einzeln auswerten lassen, ein "," einfügen oder ähnliches was diesen Zweck erfüllen würde?

Du meinst sowas?
SETLOCAL EnableDelayedExpansion
set "option=123"  
:loop
if "%option%" equ "" goto:loopende  
echo %option:~0,1%
set "option=%option:~1%  
goto:loop
:loopende
pause
Member: halo7one
halo7one Jun 10, 2008 at 15:30:46 (UTC)
Goto Top
Ah danke bis zu dem %option:~0,1% hab ich es auch schon geschaft, nur das das set "option=%option:~1% hat mir gefehlt... darauf hätte ich selbst kommen können, TY

Mit Platzhalter meine ich bei z.B. set "option=1,2,3" die Kommas oder bei set "option=1 2 3" die Leerzeichen.
Member: Biber
Biber Jun 10, 2008 at 19:55:33 (UTC)
Goto Top
Moin halo7one,

ich versuch mal eine Begriffsklärung anhand der Hilfe, die Du am CMD-Prompt zum FOR-Befehl aufrufen kannst:
FOR /?
....
....
FOR /F ["Optionen"] %variable IN ('Zeichenkette') DO Befehl [Parameter]  
FOR /F ["Optionen"] %variable IN (`Befehl`) DO Befehl [Parameter]  
....
    übersprungen. Das standardmäßige Verhalten bei der Analyse kann wahlweise
    durch den Parameter "Optionen" überschrieben werden. Das ist eine  
    Zeichenkette in Anführungszeichen, welche eines oder mehrere Schlüssel-
    wörter enthält, um verschiedene Parameter für die Analyse anzugeben. Diese
    Schlüsselwörter sind:

        eol=c           - Gibt das Zeichen für Zeilenendekommentare an
                          (nur eins).
        skip=n          - Gibt die Anzahl der Zeilen an, die am Anfang einer
                          Datei übersprungen werden.
        delims=xxx      - Gibt einen Satz von Trennzeichen an. Diese ersetzen
                          die Standardtrennzeichen TAB und Leerzeichen.
....
Was Du mit "Platzhalter" meintest, sind die "Trennzeichen", auf neudeutsch "Delimiter" oder in flapsigen Redmonder Jargon halt "delims".
Wenn die Werte (oder besser. die Token) durch Leerzeichen oder TABs getrennt sind, brauchst Du nichts angeben, denn das ist das Standardtrennzeichen.

Grüße
Biber
Member: bastla
bastla Jun 10, 2008 at 20:06:14 (UTC)
Goto Top
... und falls doch das "for" ohne "/f" gemeint war, wären die Delimiter gleichfalls Blank und TAB sowie Komma und Semikolon ...

Grüße
bastla
Member: halo7one
halo7one Jun 10, 2008 at 20:41:48 (UTC)
Goto Top
Sers Biber,
Ich danke dir für die Ausführung, doch leider ist das nichts neues für mich :/ (bezieht sich auf deinen ersten Post)
Wenn ich durch delims die Trennzeichen angebe, die die Tokens voneinander trennt, dann wird mir für eine Zeichenkette jeder Token, den ich bestimmt habe (durch tokens=1,2,3,usw.) in eine andere Variable, wie z.B. %%i, %%j, usw. ausgegeben. Doch das will ich ja gar nicht!
Ich möchte, dass wie bei for ohne Parameter (und somit mit den Standardtrennzeichen) für jeden Token/Wert jeweils die Befehle nach do ausgeführt werden und dass NICHT bei EINEM "FOR-Durchlauf" alle Tokens auf einmal bearbeitet werden, indem sie in verschiedene Variablen unterteilt werden.

Und zu der Beschreibung von "delims" (aus dem CMD-Prompt):
Gibt einen Satz von Trennzeichen an. Diese ersetzen die Standardtrennzeichen TAB und Leerzeichen.
Wenn TAB und Leerzeichen alle Standardtrennzeichen sind, warum funktioniert dann auch das Komma (",")?
Also noch einmal meine Frage:
[...] dann würde ich gerne wissen, was alles die vordefinierten Platzhalter [=Standardtrennzeichen] sind

ok hat sich erledigt (Synchron-Post) TY
Würde jetzt nur gern wissen, ob man noch andere Trennzeichen definieren kann (das wäre dann wohl mit for /f ) und sich die for-Schleife genau so verhält, wie ohne das /f und mit Standardtrennzeichen (keine Unterteilung in verschiedene Variablen, nur in eine).

MfG,
halo7one
Member: Biber
Biber Jun 10, 2008 at 21:15:06 (UTC)
Goto Top
Moin halo7one,

keine Unterteilung in verschiedene Variablen, nur in eine
Das wiederum würde heißen, das es gar keine Delimiter gibt (keine Delimiter->keine einzelnen Token bzw nur eines)
>for /f "delims=" %i in ("1,2,3") do @echo %i  
1,2,3
## -oder: Delims is mir wurscht, ich will alle Token-
>for /f "tokens=*" %i in ("1,2,3") do @echo %i  
1,2,3
## geht auch mit Leerzeichen oder whatever
>for /f "tokens=*" %i in ("1 2 3") do @echo %i  
1 2 3

Grüße
Biber
Member: halo7one
halo7one Jun 26, 2008 at 16:29:30 (UTC)
Goto Top
Also vielen Dank an euch,
das Problem ist soweit gelöst (wieder eines weniger face-smile

MfG,
halo7one