
42583
16.02.2008, aktualisiert um 20:44:09 Uhr
Wie kann ich Variablennamen fortlaufend erzeugen?
Hallo,
ich habe eine Exceltabelle mit mehreren Spalten. Jede einzelne Spalte kopierte ich in einer Textdatei. Nun will ich in einer Schleife die Variablen vorname1, vorname2 .... aus der Textdatei erzeugen, um diese dann in der Batch weiter zu verarbeiten. Somit soll dann vorname1 den vornamen aus der ersten Zeile der Textdatei bekommen usw usw. Das gleiche möchte ich dann mit anderen Angabedaten machen.
Anbei meinen Quelltext, der leider nicht so funktioniert;
set /a zahl=0
Setlocal enableDelayedExpansion
for /f "tokens=1 delims=" %%i in (vornamen.txt) do (
set /a zahl=%zahl%+1
set vornamen%zahl%=%%i
)
Bei der Test-Ausgabe echo %vornamen1% liefert er mir nur eine Echo ON Ausgabe.
Kann mir jemand da weiter helfen?
ich habe eine Exceltabelle mit mehreren Spalten. Jede einzelne Spalte kopierte ich in einer Textdatei. Nun will ich in einer Schleife die Variablen vorname1, vorname2 .... aus der Textdatei erzeugen, um diese dann in der Batch weiter zu verarbeiten. Somit soll dann vorname1 den vornamen aus der ersten Zeile der Textdatei bekommen usw usw. Das gleiche möchte ich dann mit anderen Angabedaten machen.
Anbei meinen Quelltext, der leider nicht so funktioniert;
set /a zahl=0
Setlocal enableDelayedExpansion
for /f "tokens=1 delims=" %%i in (vornamen.txt) do (
set /a zahl=%zahl%+1
set vornamen%zahl%=%%i
)
Bei der Test-Ausgabe echo %vornamen1% liefert er mir nur eine Echo ON Ausgabe.
Kann mir jemand da weiter helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80894
Url: https://administrator.de/forum/wie-kann-ich-variablennamen-fortlaufend-erzeugen-80894.html
Ausgedruckt am: 30.04.2025 um 23:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo gunnar-hro!
Grundsätzlich würde ich die Frage nach der Sinnhaftigkeit dieser Variablennummerierung stellen - eine sofortige Verarbeitung innerhalb der Schleife oder per Unterprogramm würde das Problem automatisch lösen.
Da Du Dir das aber wahrscheinlich ohnehin schon überlegt hast, kannst Du es so versuchen:
Der zweite Teil ist ein Beispiel für die spätere Verwendung der Variablen.
Grüße
bastla
Grundsätzlich würde ich die Frage nach der Sinnhaftigkeit dieser Variablennummerierung stellen - eine sofortige Verarbeitung innerhalb der Schleife oder per Unterprogramm würde das Problem automatisch lösen.
Da Du Dir das aber wahrscheinlich ohnehin schon überlegt hast, kannst Du es so versuchen:
@echo off & Setlocal enableDelayedExpansion
set /a zahl=0
for /f "delims=" %%i in (vornamen.txt) do (
set /a zahl+=1
set "vornamen!zahl!=%%i"
)
set zahl=1
:loop
echo %zahl%: !vornamen%zahl%!
set /a zahl+=1
if defined vornamen%zahl% goto :loop
Grüße
bastla
Hallo gunnar-hro!
Abgesehen davon setze ich die " (auch deshalb, weil sich im Normalfall keine Nachteile aus deren Verwendung ergeben) mittlerweile gewohnheitsmäßig.
"!" ersetzt bei Verwendung von "delayedexpansion" das "%"-Zeichen als Variablenbegrenzer - alles, was verzögert (also erst bei der unmittelbaren Verwendung, nicht schon zu Beginn eines Blocks, zB einer Schleife) aufgelöst (ausgelesen) werden soll, muss mit "!" markiert werden.
Im ersten Fall würdest Du bei Verwendung von %zahl% immer nur den Wert zu Beginn der Schleife, also 0 erhalten - die Berücksichtigung der innerhalb der Schleife vorgenommenen Veränderung (+1) kann nur durch "verzögerte Auflösung" erfolgen, daher "!".
Im zweiten Fall willst Du ja nicht eine Anzeige von zB "vorname3" erhalten, sondern es soll %vorname3%, also der Inhalt, ausgegeben werden - daher ist zunächst %zahl% auszuwerten und danach (= "verzögert") der Inhalt von vorname3 - daher auch hier wieder "!".
Grüße
bastla
Wozu die " und die ! beim >>"vornamen!zahl!=%%i"<<
Die " sorgen dafür, dass bei der Zuweisung zB keine Leerzeichen am Ende verloren gehen - da Du mit "delims=" sicher gestellt hast, dass die gesamte Zeile ausgelesen wird, ist es konsequent, auch die gesamte Zeile zuzuweisen.Abgesehen davon setze ich die " (auch deshalb, weil sich im Normalfall keine Nachteile aus deren Verwendung ergeben) mittlerweile gewohnheitsmäßig.
"!" ersetzt bei Verwendung von "delayedexpansion" das "%"-Zeichen als Variablenbegrenzer - alles, was verzögert (also erst bei der unmittelbaren Verwendung, nicht schon zu Beginn eines Blocks, zB einer Schleife) aufgelöst (ausgelesen) werden soll, muss mit "!" markiert werden.
Im ersten Fall würdest Du bei Verwendung von %zahl% immer nur den Wert zu Beginn der Schleife, also 0 erhalten - die Berücksichtigung der innerhalb der Schleife vorgenommenen Veränderung (+1) kann nur durch "verzögerte Auflösung" erfolgen, daher "!".
Im zweiten Fall willst Du ja nicht eine Anzeige von zB "vorname3" erhalten, sondern es soll %vorname3%, also der Inhalt, ausgegeben werden - daher ist zunächst %zahl% auszuwerten und danach (= "verzögert") der Inhalt von vorname3 - daher auch hier wieder "!".
Grüße
bastla
Hallo gunnar-hro!
Sollte eigentlich klappen (tut es zumindest bei mir) ...
Bist Du sicher, dass die Schreibweise von "nachnamen" stimmt, und dass die Nummerierung der "nachnamen"-Variablen in Ordnung ist? Zu letzterem: Falls Du aus getrennten Dateien einlesen musst, vor dem Einlesen der Nachnamen wieder ein "set zahl=0" verwenden!
Grüße
bastla
P.S.: Hatte ich übrigens erwähnt, dass es vermutlich einfacher wäre, auf die nummerierten Variablen zu verzichten?
P.P.S.: In Excel lässt ich sowas übrigens ganz einfach umsetzen: =LINKS(A2;1) & B2
Sollte eigentlich klappen (tut es zumindest bei mir) ...
Bist Du sicher, dass die Schreibweise von "nachnamen" stimmt, und dass die Nummerierung der "nachnamen"-Variablen in Ordnung ist? Zu letzterem: Falls Du aus getrennten Dateien einlesen musst, vor dem Einlesen der Nachnamen wieder ein "set zahl=0" verwenden!
Grüße
bastla
P.S.: Hatte ich übrigens erwähnt, dass es vermutlich einfacher wäre, auf die nummerierten Variablen zu verzichten?
P.P.S.: In Excel lässt ich sowas übrigens ganz einfach umsetzen: =LINKS(A2;1) & B2