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!
Please also mark the comments that contributed to the solution of the article
Content-Key: 92846
Url: https://administrator.de/contentid/92846
Printed on: April 19, 2024 at 07:04 o'clock
2 Comments
Latest comment
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