Batch Variablen Name in Variable speichern und durch den Wert in der Variable die Variable aufrufen

Patrick24

Cadet 2nd Year
Registriert
Dez. 2019
Beiträge
16
Hey,
wie der Titel schon sagt ich möchte den Namen einer Variable in der Variable test speichern und dann den Wert von der Variable wo ich den Namen in test gespeichert habe mithilfe der Variable test aufrufen

Hoffe ich habe es verständlich beschrieben

LG
Patrick
 
In welcher Sprache?
Vllt solltest du dein Problem schildern, so macht das nicht wirklich sinn.
 
Geht in Batch nur sehr beschränkt.
Folgendes funktioniert:
Code:
setlocal enabledelayedexpansion
set varname=5
set test=varname
echo !%test%!
 
Sicher dass er nicht den Variablennamen will? Und nicht den wert der variable?
 
Zu ca. 90% sicher.
[...] dann den Wert von der Variable wo ich den Namen in test gespeichert habe mithilfe der Variable test aufrufen
 
simpsonsfan schrieb:
Zu ca. 90% sicher.
So wie ich den OP verstanden habe moechte er das folgende umsetzen:

varname = 0815
test = "varname"
Echo test ergibt die Ausgabe 0815

Er moechte also ueber den Namen der Variable den Inhalt dieser Variable ueber eine andere Variable ausgeben. Solange der OP allerdings keine weiteren Infos bezueglich Sprache und Use Case gibt wird es schwierig eine allgemeine Aussage zu treffen.
 
  • Gefällt mir
Reaktionen: twK
@schneup Als Sprache steht doch "Batch" im Titel ... ich wurde eh eher Powershell nehmen

Ich glaube auch, dass er eine Variable deren Name in einem String vorkommt, dann evaluieren will:
PowerShell:
$x = "y"
$y = "Wert"

$($x) // geht nicht bzw. gibt nur den String "y" zurueck

$(Get-Variable -Name $x -ValueOnly) // klappt, also evaluiert zu "Wert"
 
@schneup und @abcddcba Davon gehe ich ebenfalls aus. Deshalb schrieb ich ja auch, dass ich zu 90% sicher bin, dass der TE nicht den Variablennamen ausgeben will, sondern eben ihren Wert. Und das tut mein Beispiel ja auch, es gibt 5 aus.
Ich glaube, wir haben hier die Frage von twK unterschiedlich interpretiert.
 
  • Gefällt mir
Reaktionen: twK
twK schrieb:
In welcher Sprache?
Vllt solltest du dein Problem schildern, so macht das nicht wirklich sinn.
Natürlich Batch (siehe Titel)

Hier mein Anwendungsbeispiel:
Ich will per for-Schleife 24 Strings aus einer txt auslesen und jeden in eine extra variable packen
Klar könnte ich das mit vielen if abfragen lösen, aber die Anzahl der einzulesenden Strings wird sich noch erhöhen
Jetzt dachte ich das ich es vielleicht wiefolgt lösen könnte:
set durchlauf = 1
for schleife die txt einliest (
set variable%durchlauf% = %%i
set /a durchlauf = %durchlauf% + 1
)

dafür habe ich mir folgenden code gemacht
@Echo off
set durchlauf = 1;
:start
set variable%durchlauf% = %durchlauf%
set /a durchlauf = %durchlauf% + 1
if %durchlauf% == 5 goto test
goto start

:test
echo %variable1%
echo %variable2%
echo %variable3%
echo %variable4%
echo %variable5%
pause

ergebnis = Echo ist ausgeschaltet (off)

könnte ich es irgendwie so einfach lösen oder muss ich dann viele if abfragen machen?

LG
Patrick24
 
Patrick24 schrieb:
Natürlich Batch (siehe Titel)
Solange Du kein System angibst ist es nicht ganz klar was Du meinst da der Batch Begriff durchaus auch bei anderen Systemen fuer Shells verwendet wird (auch wenn Skript ueblicher ist).
Patrick24 schrieb:
Hier mein Anwendungsbeispiel:
Ich will per for-Schleife 24 Strings aus einer txt auslesen und jeden in eine extra variable packen
Klar könnte ich das mit vielen if abfragen lösen, aber die Anzahl der einzulesenden Strings wird sich noch erhöhen
.......
könnte ich es irgendwie so einfach lösen oder muss ich dann viele if abfragen machen?
Gibt es einen Grund wieso Du Dein Problem mit Steinzeitmethoden umsetzen moechtest? Wie @abcddcba bereits geschrieben hat waere unter Windows die Powershell zur Implementierung geeigneter. Damit muesste es moeglich sein das ganze relativ kompakt umzusetzen. Stringmanipulationen sind nicht unbedingt eine der Staerken der Batchprograrmmierung.
 
Solange nichts dagegen spricht, sollte man sich wirklich überlegen, bspw. auf Powershell umzusteigen.
Ansonsten würde elementares Debugging gebieten, dass man sich mal anschaut, was in die Variablen geschrieben wird. In dem Code aus #9 sind bspw. ein Semikolon und Leerzeichen entweder Teil vom Variablennamen oder vom Variablenwert (die Variablen heißen "variable 1" statt "variable1" und enthalten " 1" oder " 1;" statt "1".
Folgendes klappt hier sogar ohne delayedexpansion:
Code:
@echo off
setlocal
set durchlauf=1
:start
set variable%durchlauf%=%durchlauf%
set /a durchlauf = %durchlauf% + 1
if %durchlauf% == 6 goto test
goto start

:test
rem set
echo %variable1%
echo %variable2%
echo %variable3%
echo %variable4%
echo %variable5%
pause
Ob man sich damit auch etwas bauen kann, was Zeilen aus einer txt in einzelne Variablen liest, müsste ich testen. Sollte aber mit for /F grundsätzlich machbar sein.

Edit: Ja, funktioniert:
Code:
@echo off
setlocal enabledelayedexpansion
set durchlauf=1
for /F "delims=" %%i in (datei.txt) do (
 set var!durchlauf!=%%i
 set /a durchlauf = !durchlauf! + 1
)

echo %var1%
 
Zuletzt bearbeitet:
Zurück
Oben