tom-jan
Goto Top

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.

  1. user.txt
  2. 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 zurck 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

  1. 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.
  2. Bei :Teams2 soll der 2. Wert, der hinter dem Wert %username% steht, gesetzt werden als MTK.
  3. Doch soweit kommt es gar nicht -,-
  4. 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

Content-Key: 115202

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

Printed on: April 26, 2024 at 02:04 o'clock

Member: Biber
Biber May 04, 2009 at 09:13:02 (UTC)
Goto Top
Moin Tom-Jan,

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
Mitglied: 77559
77559 May 04, 2009 at 09:28:39 (UTC)
Goto Top
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
For /F "tokens=1 delims=;" %%a in (%DATEI1%) do (IF /I %%a==%USERNAME% goto Teams2)

Gruß
LotPings
Member: Tom-Jan
Tom-Jan May 04, 2009 at 09:33:05 (UTC)
Goto Top
Grüß Dich Biber,

danke erstmal dafür ! Wäre dann wohl meine 2. Frage geworden -,-

Kann ich das auch so schreiben?
FOR /F "tokens=1* delims=;" %%a IN (%DATEI2%) DO (IF %%a==%USERNAME% SET MTK=%%b)  
(siehe das * nach der 1)

Ok, der Inhalt des Textes, der hier stand, wurde gelöst face-smile
Member: Tom-Jan
Tom-Jan May 04, 2009 at 09:37:40 (UTC)
Goto Top
Hallo LotPings,
Zitat von @77559:
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
For /F "tokens=1 delims=;" %%a in (%DATEI1%) do (IF /I%%a==%USERNAME% goto Teams2)

Gruß
LotPings

danke ! Das war es. Die Groß-/Kleinschreibung. Die Routine springt jetzt an den richtigen Punkt.

Hätte nicht gedacht, dass sowas "kleines" eine so große Auswirkung haben kann.
Member: Biber
Biber May 04, 2009 at 10:40:20 (UTC)
Goto Top
Moin Tom-Jan,

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"  
... 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.

>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. face-wink
Member: Tom-Jan
Tom-Jan May 04, 2009 at 12:16:31 (UTC)
Goto Top
Hallo Biber nochmal,

danke Dir für die Erklärung. Den Test hätte ich noch ausgeführt, wenn es bis dahin gegangen wäre ^^

Hat sich mit LotPings Beitrag zeitlich überschnitten.