In for-Schleife alle Tokens mitzählen
Hi!
Hab mir nun schon zwei mal das manual für for durchgelesen, aber entweder sehe ichs net oder es geht einfach nicht
Ich habe eine Steuerdatei, die (beispielhaft mal so) aufgebaut ist:
In Zeile 4 taucht ein Problem auf. Wenn ich das zweite token haben möchte, wird mir 44 ausgegeben. Ich vermute, weil NULL-Werte ignoriert werden. Ich brauche aber zwingend das zweite token, auch wenn es leer ist. Welche Option bleibt mir da?
Danke!
Hab mir nun schon zwei mal das manual für for durchgelesen, aber entweder sehe ichs net oder es geht einfach nicht
Ich habe eine Steuerdatei, die (beispielhaft mal so) aufgebaut ist:
@Name@Vorname@Alter
@Foo@Bar@99
@nix@da@33
@blubb@@44
In Zeile 4 taucht ein Problem auf. Wenn ich das zweite token haben möchte, wird mir 44 ausgegeben. Ich vermute, weil NULL-Werte ignoriert werden. Ich brauche aber zwingend das zweite token, auch wenn es leer ist. Welche Option bleibt mir da?
Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 92846
Url: https://administrator.de/contentid/92846
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
2 Kommentare
Neuester Kommentar
Du könntest den Klammeraffen als Delimiter definieren.
Edit:
War nix, gerade probiert. Wenn dazwischen kein Leerzeichen ist, klappt das nicht.
Mit Hellsehen hat der Command-Interpreter leider noch nichts am Hut.
Ich würde entweder dafür sorgen, dass der "Erzeuger" der Steuerdatei dort Leerzeichen einfügt, oder die Zeile in der Batchdatei komplett einlesen und erst mal "nachbearbeiten", z. B. "@@" ersetzen durch "@ @" und dann erst Token verwenden.
Edit:
War nix, gerade probiert. Wenn dazwischen kein Leerzeichen ist, klappt das nicht.
Mit Hellsehen hat der Command-Interpreter leider noch nichts am Hut.
Ich würde entweder dafür sorgen, dass der "Erzeuger" der Steuerdatei dort Leerzeichen einfügt, oder die Zeile in der Batchdatei komplett einlesen und erst mal "nachbearbeiten", z. B. "@@" ersetzen durch "@ @" und dann erst Token verwenden.
Moin Dynadrate,
hab ich Euch denn gar nix beigebracht?
Demo am CMD-Prompt:
[Funktioniert, wenn defaultmäßig DelayedExpansion für alle CMD-Sessions aktiviert ist.
Im Batch:
Statt "NULL" kannst Du natürlich auch irgendeinen anderen Anzeigewert für "Leer" festlegen.
Is' ja jetzt Dein Batch.
Grüße
Biber
hab ich Euch denn gar nix beigebracht?
Demo am CMD-Prompt:
>for /f "delims=" %i in (dd.txt) do @set "in=%i" & for /f "delims=@ tokens=1-3" %a in ("!in:@@=@NULL@!") do @echo 1[%a] 2[%b] 3[%c]
1[Name] 2[Vorname] 3[Alter]
1[Foo] 2[Bar] 3[99]
1[nix] 2[da] 3[33]
1[blubb] 2[NULL] 3[44]
[Funktioniert, wenn defaultmäßig DelayedExpansion für alle CMD-Sessions aktiviert ist.
Im Batch:
@echo off & Setlocal EnableDelayedExpansion
for /f "delims=" %%i in (dd.txt) do (
set "in=%%i"
for /f "delims=@ tokens=1-3" %%a in ("!in:@@=@NULL@!") do (
echo 1[%%a] 2[%%b] 3[%%c]
))
Is' ja jetzt Dein Batch.
Grüße
Biber