Kann aus Bausteinen eine bereits vorhandene Variable abgefragt werden?
Hallihallo
Als Nicht-Entwickler durfte ich von dieser Seite bereits sehr viel von eurem KnowHow profitieren; an dieser Stelle ein herzliches Dankeschön.
Aktuell bemühe ich mich um die Frage, ob aus vorhandenen Bausteinen/Werten eine bereits definierte Variable abgefragt werden kann. Bisher kriege ich es nicht hin, kann sein das es auch gar nicht funktioniert.
Zur Veranschaulichung nachfolgender Aufbau, in welcher zuerst die Variablen
Der Ausdruck
Gefühlt habe ich das in hunderte Varianten versucht, scheitere jedoch kläglich.
Gibt es eine Möglichkeit, das Gewünschte zu erreichen?
Liebe Grüsse aus der Schweiz
burningstep
Als Nicht-Entwickler durfte ich von dieser Seite bereits sehr viel von eurem KnowHow profitieren; an dieser Stelle ein herzliches Dankeschön.
Aktuell bemühe ich mich um die Frage, ob aus vorhandenen Bausteinen/Werten eine bereits definierte Variable abgefragt werden kann. Bisher kriege ich es nicht hin, kann sein das es auch gar nicht funktioniert.
Zur Veranschaulichung nachfolgender Aufbau, in welcher zuerst die Variablen
Ist1
, Ist2
und Ist3
definiert werden, diese dann je nach Verlauf des Programms beim Binding
abgefragt werden sollen.Der Ausdruck
%Ist%Number%%
soll zusammen gebaut entweder Ist1
, Ist2
oder Ist3
ergeben und beim echo
sollte dann entsprechend one, two und three ausgegeben werden, das will mir aber partout nicht gelingen. Ich krieg das nicht richtig zusammen gebaut hin.@echo off
set Ist1=one
set Ist2=two
set Ist3=three
set List=1 2 3
for %%a in (%List%) do (
set Number=%%a
call :Binding
)
pause >nul
exit
:Binding
echo %Ist%Number%%
exit /b
Gefühlt habe ich das in hunderte Varianten versucht, scheitere jedoch kläglich.
Gibt es eine Möglichkeit, das Gewünschte zu erreichen?
Liebe Grüsse aus der Schweiz
burningstep
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 250989
Url: https://administrator.de/contentid/250989
Ausgedruckt am: 25.11.2024 um 09:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo burningstep,
das sollte so gehen:
Die Variable
Das entscheidende bei beiden Varianten ist, dass man einen
1. Auswertung
Die Variable
2. Auswertung
Weil die Befehlszeile den
Gruß
Friemler
das sollte so gehen:
@echo off & setlocal
set Ist1=one
set Ist2=two
set Ist3=three
set List=1 2 3
for %%a in (%List%) do (
set "Number=%%a"
call :Binding
)
pause > NUL
exit /b
:Binding
call echo %%Ist%Number%%%
exit /b
Die Variable
%Number%
ist aber nicht unbedingt notwendig, man kann den Wert auch als Argument an das Unterprogramm Binding
übergeben und das Beispiel folgendermaßen schreiben:@echo off & setlocal
set Ist1=one
set Ist2=two
set Ist3=three
set List=1 2 3
for %%a in (%List%) do (
call :Binding "%%a"
)
pause > NUL
exit /b
:Binding
call echo %%Ist%~1%%
exit /b
Das entscheidende bei beiden Varianten ist, dass man einen
CALL
-Befehl vor das ECHO
schreibt und die Prozentzeichen verdoppelt, die im Unterprogramm Binding
den dynamisch erzeugten Variablennamen umschließen. Dadurch wird der Batchscript-Interpreter dazu gezwungen, die Zeile zweimal zu parsen/auszuwerten.1. Auswertung
Die Variable
%Number%
bzw. %1
(die Tilde ~
in %~1
entfernt umgebende Anführungszeichen) wird durch ihren Wert ersetzt und die umschließenden doppelten %
-Zeichen werden auf jeweils ein Zeichen reduziert. => Beim ersten Schleifendurchlauf ergibt sich folgende Befehlszeile:call echo %Ist1%
2. Auswertung
Weil die Befehlszeile den
CALL
-Befehl enthält, wird sie erneut ausgewertet und dabei festgestellt, dass die Variable %Ist1%
durch ihren Wert ersetzt werden muss. Danach wird der CALL
-Befehl ausgeführt. Erstes Argument ist das auszuführende Programm bzw. der auszuführende interne Befehl, hier ECHO
. Weitere Argumente, hier der Wert von %Ist1%
, werden dem auszuführenden Programm bzw. dem auszuführenden internen Befehl als Argumente übergeben. => Es ergibt sich die Befehlszeileecho one
Gruß
Friemler