For do if - Auslesen des 2. Eintrages in einer Textdatei scheitert
Hallo liebe Forenuser,
normalerweise gehöre ich hier eher zur lesenden Fraktion und bis jetzt konnten auch alle meine Fragen über die SuFu oder die Guides gelöst werden. Aber bei meinem aktuellen Problem scheine ich blind zu sein und benötige eure Hilfe bzw. Augen.
Folgendes: Ich habe 2 Textdateien.
In der user.txt steht in jeder Zeile ein Userkürzel drin. Kein Userkürzel ist doppelt vorhanden.
In der usermatrikel.txt stehen in jeder Zeile die gleichen Userkürzel drin, dann ein Kommata, gefolgt von der Matrikel. Auch hier gibt es keine doppelten Einträge.
Das jeweilige Userkürzel ergibt sich aus dem Windows Login Namen %username%.
Mein Code sieht wie folgt aus:
<code=plain>@echo off
SET DATEI1=e:\User.txt
SET DATEI2=e:\UserMatrikel.txt
:Teams1
echo.
echo Die Teams Auswertungs- und Selektionsdateien werden zurck kopiert.
echo -------------------------------------------------------------------
echo %USERNAME%
For /F "tokens=1 delims=;" %%a in (%DATEI1%) do (IF %%a==%USERNAME% goto Teams2)
GOTO Fehler
:Teams2
FOR /F "tokens=1 delims=;" %%a IN (%DATEI2%) DO (IF %%a==%USERNAME% SET MTK=%%b)
echo Hier sollte die Matrikel stehen: %MTK%
pause
Goto loeschen
:Fehler
echo Nix gefunden -,-
pause
Goto loeschen
:loeschen
:: Lösche Variablen
SET DATEI1=
SET DATEI2=
SET MTK=
EXIT
Das Gute an der Sache ist, es hat schon mal geklappt. In einer ähnlichen Form. Besonders die Ermittlung des Wert %username% aus der user.txt. Nur jetzt nicht mehr.
Die gesetzen Pfade habe ich doppelt und dreifach kontrolliert, den Inhalt der beiden Textdateien auch. Nur, warum springt er mir gleich zu :Fehler ? Was übersehe ich?
Über andere Tips würde ich mich auch sehr freuen.
Danke euch fürs lesen.
LG Tom-Jan
normalerweise gehöre ich hier eher zur lesenden Fraktion und bis jetzt konnten auch alle meine Fragen über die SuFu oder die Guides gelöst werden. Aber bei meinem aktuellen Problem scheine ich blind zu sein und benötige eure Hilfe bzw. Augen.
Folgendes: Ich habe 2 Textdateien.
- user.txt
- usermatrikel.txt
In der user.txt steht in jeder Zeile ein Userkürzel drin. Kein Userkürzel ist doppelt vorhanden.
In der usermatrikel.txt stehen in jeder Zeile die gleichen Userkürzel drin, dann ein Kommata, gefolgt von der Matrikel. Auch hier gibt es keine doppelten Einträge.
- z. B.: tkr ; AKGWG (Leerzeichen bewußt für die Verdeutlichung eingefügt)
Das jeweilige Userkürzel ergibt sich aus dem Windows Login Namen %username%.
Mein Code sieht wie folgt aus:
<code=plain>@echo off
SET DATEI1=e:\User.txt
SET DATEI2=e:\UserMatrikel.txt
:Teams1
echo.
echo Die Teams Auswertungs- und Selektionsdateien werden zurck kopiert.
echo -------------------------------------------------------------------
echo %USERNAME%
For /F "tokens=1 delims=;" %%a in (%DATEI1%) do (IF %%a==%USERNAME% goto Teams2)
GOTO Fehler
:Teams2
FOR /F "tokens=1 delims=;" %%a IN (%DATEI2%) DO (IF %%a==%USERNAME% SET MTK=%%b)
echo Hier sollte die Matrikel stehen: %MTK%
pause
Goto loeschen
:Fehler
echo Nix gefunden -,-
pause
Goto loeschen
:loeschen
:: Lösche Variablen
SET DATEI1=
SET DATEI2=
SET MTK=
EXIT
- Die Batch Datei soll aus der user.txt auslesen, ob der Wert %username% dort vorhanden ist. Wenn ja, dann soll er zu :Teams2 springen. Wenn nicht, zu :Fehler.
- Bei :Teams2 soll der 2. Wert, der hinter dem Wert %username% steht, gesetzt werden als MTK.
- Doch soweit kommt es gar nicht -,-
- Es wird gleich zu :Fehler gesprungen.
Das Gute an der Sache ist, es hat schon mal geklappt. In einer ähnlichen Form. Besonders die Ermittlung des Wert %username% aus der user.txt. Nur jetzt nicht mehr.
Die gesetzen Pfade habe ich doppelt und dreifach kontrolliert, den Inhalt der beiden Textdateien auch. Nur, warum springt er mir gleich zu :Fehler ? Was übersehe ich?
Über andere Tips würde ich mich auch sehr freuen.
Danke euch fürs lesen.
LG Tom-Jan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 115202
Url: https://administrator.de/forum/for-do-if-auslesen-des-2-eintrages-in-einer-textdatei-scheitert-115202.html
Ausgedruckt am: 28.04.2025 um 16:04 Uhr
6 Kommentare
Neuester Kommentar
Moin Tom-Jan,
der Hauptfehler steckt in dieser Zeile
Da du mit "tokens=1" nur das erste Token (im folgenden als %%a bekannt) aus der Zeile rausbröselst, kannst du am rechten Rand solange ein %%b zuweisen, wie Du magst.... da wird nie ein zeilenspezifischer Wert rüberwandern.
Ändere, wenn Du Token 1 und Token 2 brauchst die Zeile in
.. und alles wird besser.
Grüße
Biber
der Hauptfehler steckt in dieser Zeile
FOR /F "tokens=1 delims=;" %%a IN (%DATEI2%) DO (IF %%a==%USERNAME% SET MTK=%%b)
Da du mit "tokens=1" nur das erste Token (im folgenden als %%a bekannt) aus der Zeile rausbröselst, kannst du am rechten Rand solange ein %%b zuweisen, wie Du magst.... da wird nie ein zeilenspezifischer Wert rüberwandern.
Ändere, wenn Du Token 1 und Token 2 brauchst die Zeile in
FOR /F "tokens=1,2 delims=;" %%a IN (%DATEI2%) DO (IF %%a==%USERNAME% SET MTK=%%b)
.. und alles wird besser.
Grüße
Biber

Hallo Tom-Jan,
ich würde die if -Abfrage unabhängig von der Groß-/Kleinschreibung machen, ggfs ist das der Grund das %USERNAME% nicht gefunden wird
Gruß
LotPings
ich würde die if -Abfrage unabhängig von der Groß-/Kleinschreibung machen, ggfs ist das der Grund das %USERNAME% nicht gefunden wird
For /F "tokens=1 delims=;" %%a in (%DATEI1%) do (IF /I %%a==%USERNAME% goto Teams2)
Gruß
LotPings
Moin Tom-Jan,
nur der Vollständikeit halber: wie ein Test am CMD-Prompt zeigt..
... in Deinem Fall wären Syntaxis..äh...Syntaxen...ich meine Aufrufvarianten im Ergebnis gleichwertig.
Einen Unterschied bekämst Du allerdings, wenn mehr als 2 "tokens" in einer Zeile sein sollten.
Grüße
Biber
P.S. Den fehlenden "/i"-Parameter habe ich gar nicht wahrgenommen, da mir sofort der Bug#2 ins Auge gesprungen ist.
nur der Vollständikeit halber: wie ein Test am CMD-Prompt zeigt..
>FOR /F "tokens=1* delims=;" %a IN ("userxy;sjfg3") do @echo if /i [%a]==[userXY] set "MTK=%b"
if /i [userxy]==[userXY] set "MTK=sjfg3"
(=12:33:50 D:\temp=)
>FOR /F "tokens=1,2 delims=;" %a IN ("userxy;sjfg3") do @echo if /i [%a]==[userXY] set "MTK=%b"
if /i [userxy]==[userXY] set "MTK=sjfg3"
Einen Unterschied bekämst Du allerdings, wenn mehr als 2 "tokens" in einer Zeile sein sollten.
>FOR /F "tokens=1* delims=;" %a IN ("userxy;sjfg3;drei") do @echo if /i [%a]==[userXY] set "MTK=%b"
if /i [userxy]==[userXY] set "MTK=sjfg3;drei"
Grüße
Biber
P.S. Den fehlenden "/i"-Parameter habe ich gar nicht wahrgenommen, da mir sofort der Bug#2 ins Auge gesprungen ist.