Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Kann aus Bausteinen eine bereits vorhandene Variable abgefragt werden?

Frage Entwicklung Batch & Shell

Mitglied: burningstep

burningstep (Level 1) - Jetzt verbinden

05.10.2014, aktualisiert 14:17 Uhr, 934 Aufrufe, 2 Kommentare

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 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.
01.
@echo off 
02.
 
03.
set Ist1=one 
04.
set Ist2=two 
05.
set Ist3=three 
06.
 
07.
set List=1 2 3 
08.
 
09.
for %%a in (%List%) do ( 
10.
	set Number=%%a 
11.
	call :Binding 
12.
13.
 
14.
pause >nul 
15.
exit 
16.
 
17.
:Binding 
18.
echo %Ist%Number%% 
19.
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
Mitglied: Friemler
LÖSUNG 05.10.2014, aktualisiert um 14:17 Uhr
Hallo burningstep,

das sollte so gehen:
01.
@echo off & setlocal 
02.
 
03.
set Ist1=one 
04.
set Ist2=two 
05.
set Ist3=three 
06.
 
07.
set List=1 2 3 
08.
 
09.
for %%a in (%List%) do ( 
10.
  set "Number=%%a" 
11.
  call :Binding 
12.
13.
 
14.
pause > NUL 
15.
exit /b 
16.
 
17.
 
18.
:Binding 
19.
  call echo %%Ist%Number%%% 
20.
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:
01.
@echo off & setlocal 
02.
 
03.
set Ist1=one 
04.
set Ist2=two 
05.
set Ist3=three 
06.
 
07.
set List=1 2 3 
08.
 
09.
for %%a in (%List%) do ( 
10.
  call :Binding "%%a" 
11.
12.
 
13.
pause > NUL 
14.
exit /b 
15.
 
16.
 
17.
:Binding 
18.
  call echo %%Ist%~1%% 
19.
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 Befehlszeile
echo one
Gruß
Friemler
Bitte warten ..
Mitglied: burningstep
05.10.2014, aktualisiert um 14:28 Uhr
Hallo Friemler

Vielen lieben Dank für deine Antwort und super Erklärung.
Der call vor dem echo ist für mich neu. Aber ich glaub, ich habe verstanden

Grüsse
burningstep
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Bestimmtes Arrayfeld mit Variable aufrufen? - VBS (10)

Frage von gabrixl zum Thema VB for Applications ...

Batch & Shell
gelöst Laufwerksbezeichnung (label) in Batch als Variable nutzen (21)

Frage von tobias.mock zum Thema Batch & Shell ...

Microsoft Office
gelöst Micorsoft Excel: Variable Anzeige von mehreren Werten anhand von Stammdaten (1)

Frage von sammy65 zum Thema Microsoft Office ...

Neue Wissensbeiträge
Administrator.de Feedback

Umgangsformen auf der Seite

(7)

Information von Frank zum Thema Administrator.de Feedback ...

Windows 10

Windows 8.x oder 10 Lizenz-Key aus dem ROM auslesen mit Linux

(11)

Tipp von Lochkartenstanzer zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Batch & Shell
gelöst Dir tc Befehl unter Windows 10 macht Probleme (14)

Frage von sugram zum Thema Batch & Shell ...

Windows Server
Windows Server Komplettspiegelung (13)

Frage von pdiddo zum Thema Windows Server ...

Windows Server
Windows Server 2016 RDS Remoteapp Anzeigefehler (11)

Frage von qlnGenius zum Thema Windows Server ...