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, 929 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
Batch & Shell
gelöst Batch: CPU-Auslastung eines Prozesses auslesen und als Variable definieren (2)

Frage von tralveller zum Thema Batch & Shell ...

Batch & Shell
gelöst Sonderzeichen aus einer Variable entfernen? (13)

Frage von Kriegstreiber zum Thema Batch & Shell ...

Batch & Shell
gelöst In einer Batch variable die Datei extension ermitteln ? (4)

Frage von Kriegstreiber zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte