[BATCH] FOR-Schleife Erklärung der Variable

Dynarius

Grünschnabel
Hallo,

ich habe echt ewigkeiten gesucht aber nicht gefunden. Ich habe folgenden Quellcode:

Code:
for /F "tokens=1,2 delims=," %%a in (C:\export.txt) do call :start %%a %%b

goto :eof

:start
	set name=%1
	set telefon=%2
	set shorty=%telefon:~-4%
	echo [%1] [%2] wird zu [%name%] [%shorty%]
goto :eof
pause

Kann mir jemand erkären, warum hier ":start %%a %%b" auf die Variablen %%a und %%b zugegriffen wird, bzw. habe ich es auch mal mit ":start %%a %%c" probiert da funktioniert es nicht. Warum aber nicht ?

%%b wurde doch gar nicht definiert wieso speichert er mir darin trotzdem einen Wert ab ?

Wäre echt super wenn mir das einer erklären könnte
 
Hi.
Kann mir jemand erkären, warum hier ":start %%a %%b" auf die Variablen %%a und %%b zugegriffen wird, bzw. habe ich es auch mal mit ":start %%a %%c" probiert da funktioniert es nicht. Warum aber nicht ?

%%b wurde doch gar nicht definiert wieso speichert er mir darin trotzdem einen Wert ab ?
Die Eingabe wird in "Token" (an Kommas) getrennt und es werden der 1. und der 2. Token an Variablen zugewiesen. Die "for /F" Schleife arbeitet nun mal nach diesem Prinzip.

Lies dir doch einfach mal die Hilfe ("help for") durch.

Gruß
 
hab mir die hilfe schon durchgelesen, dort wird aber meine frage nicht beantwortet. An sich verstehe ich die for-schleife auch die tokens die zeile für zeile ausgelesen werden. Das einzige was ich an der For-Schleife nicht verstehe ist eben der schluss "%%a %%b". Es scheint mir fast als hätte Batch seine eigene Reihenfolge denn wenn man folgendes macht:

Code:
for /F "tokens=1,2 delims=," %%b in (C:\export.txt) do call :start %%b %%c

funktioniert es wieder
 
hab mir die hilfe schon durchgelesen, dort wird aber meine frage nicht beantwortet. An sich verstehe ich die for-schleife auch die tokens die zeile für zeile ausgelesen werden. Das einzige was ich an der For-Schleife nicht verstehe ist eben der schluss "%%a %%b". Es scheint mir fast als hätte Batch seine eigene Reihenfolge denn wenn man folgendes macht:

Code:
for /F "tokens=1,2 delims=," %%b in (C:\export.txt) do call :start %%b %%c

funktioniert es wieder
Ja, und?! Was ist jetzt daran nicht zu verstehen?
help for hat gesagt.:
tokens=x,y,m-n - Gibt an, welche Token von jeder Zeile an die
FOR-Schleife weitergegeben werden.
Das führt dazu, dass zusätzliche Variablen erzeugt
werden.
Mit der Form m-n wird dabei ein Bereich vom
m-ten bis zum n-ten Token angegeben. Wenn das letzte
Zeichen ein Sternchen ist, wird eine zusätzliche
Variable deklariert, die den verbleibenden Text
dieser Zeile enthält.
Gruß
 
Ok, heißt das dann das er im prinzip den ersten Token in %%a schreibt und den zweiten dann automatisch in %%b ****
 
Ok, heißt das dann das er im prinzip den ersten Token in %%a schreibt und den zweiten dann automatisch in %%b ****
Ja. Das ist alles in der Hilfe sehr gut erklärt:
help for hat gesagt.:
Code:
FOR /F "eol=; tokens=2,3* delims=, " %i in (Datei.txt) do @echo %i %j %k
Dabei ist %i explizit deklariert, während %j und %k implizit durch die
Option "tokens=" deklariert werden.
Gruß
 
interessant ist aber das er die variablen nur in der schleife hat. sprich %%a %%b. Wenn ich nämlich in der sprungmarke:

:start
echo %%a %%b

mache funktioniert es nicht. Erst wenn man folgendes in die Sprungmarke schreibt:

:start
echo %1 %2

funktioniert es wieder.
 

Neue Beiträge

Zurück