Top-Themen

Aktuelle Themen (A bis Z)

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

Windows Befehlszeile (cmd.exe) - Auswertung indizierte oder geschachtelte Variable

Frage Entwicklung Batch & Shell

Mitglied: itservice

itservice (Level 1) - Jetzt verbinden

13.02.2008, aktualisiert 16:02 Uhr, 11913 Aufrufe, 4 Kommentare

Hallo,
ich arbeite im administrativen Bereich sehr viel mit Scripten (Batch-Dateien) unter XP/Win2003 zur Automatisierung diverser Abläufe und glaube, mich darin recht gut auszukennen, die bisherigen Ergebnisse sind funktional und durchaus effektiv.
Ich knoble aber seit einiger Zeit an einem Problem und komme auch nach eingehender Recherche im Internet einfach nicht weiter. Es kann auch sein, daß ich darin eine vollige Blockade habe oder einfach zuviel von der Befehlszeile fordere....

Nun zum Problem (ich versuche am Beispiel einfach zu veranschaulichen). Bitte nicht die Sinnhaftigkeit des Inhaltes beachten, sondern die Struktur, danke:

Über ein eigenes Script (Parameterdatei) sind mehrfach Variablen definiert, die durchnummeriert werden und als Inhalt jeweils einen Befehl besitzen (Bsp.):

SET VAR1=defrag c
SET VAR2=ntbackup ....
SET VAR3=....

Über ein "Steuerprogramm" der gleichen Instanz sollen in einer Schleife die Variablen-Inhalte (also die dahinterliegenden Befehle) nacheinander per START abgearbeitet werden (abstrahierte Form):

SET COUNTER=1
:loop

echo %COUNTER%
CALL VAR%COUNTER% <---- hier liegt das "Problem"

SET /A COUNTER+=1
IF %COUNTER% LEQ 3 GOTO loop

Was muß ich tun oder syntaktisch angeben, um im ersten Schleifendurchlauf hinter dem CALL nicht "VAR1", sondern "defrag c" stehen zu haben. Eine weitergehende Schachtelung??? ... mit % geht nicht, da vor Ausführung der Zeile erst die ganze Zeile ausgewertet wird:

CALL %VAR%COUNTER%% ergibt natürlich "COUNTER%" und ist Blödsinn...

Eine Zwischenspeicherung über

SET BEFEHL=VAR%COUNTER% und
CALL %BEFEHL%

bringt ja auch nichts, da ich nicht "VAR1" ausführen will sondern das, was hinter VAR1 steht.

Andere Sonderzeichen ((,[, etc.) zur Auflösung einer Verschachtelung haben mir auch nicht weitergeholfen...

Ich denke, ich konnte mein Problem einfach und verständlich formulieren und hoffe auf einen Spezialisten, der mir meine Scheuklappen aufdeckt - vielen herzlichen Dank!!

Gruß Jörger
Mitglied: miniversum
13.02.2008 um 15:30 Uhr
Da mußt du mit Delayedexpansion arbeiten. Hie rmal ein Beispiel:
setlocal enabledelayedexpansion

set Var1=Hallo
set Var2=du
set Var3=da

FOR /L %%i IN (1,1,3) DO echo !Var%%i!

Alternativ gehts auch so:
set Var1=Hallo
set Var2=du
set Var3=da

FOR /L %%i IN (1,1,3) DO call echo %%Var%%i%%
In deinem Fall wäre das also dann ein
01.
SET COUNTER=1 
02.
:loop 
03.
 
04.
echo %COUNTER% 
05.
CALL CALL %%VAR%COUNTER%%% 
06.
 
07.
SET /A COUNTER+=1 
08.
IF %COUNTER% LEQ 3 GOTO loop
miniversum
Bitte warten ..
Mitglied: bastla
13.02.2008 um 15:32 Uhr
Hallo itservice und willkommen im Forum!

Ein klassischer Fall für die Verwendung von "delayedexpansion":
01.
@echo off & setlocal enabledelayedexpansion 
02.
SET VAR1=defrag c 
03.
SET VAR2=ntbackup .... 
04.
SET VAR3=.... 
05.
SET COUNTER=1 
06.
:loop 
07.
 
08.
echo %COUNTER% ist dran! Und los! 
09.
CALL !VAR%COUNTER%! 
10.
 
11.
SET /A COUNTER+=1 
12.
IF %COUNTER% LEQ 3 GOTO loop
Allerdings würde ich folgende Schreibweise wählen (da flexibler):
01.
SET VAR1=defrag c 
02.
SET VAR2=ntbackup .... 
03.
SET VAR3=.... 
04.
SET COUNTER=1 
05.
:loop 
06.
 
07.
echo %COUNTER% ist dran! Und los! 
08.
CALL !VAR%COUNTER%! 
09.
 
10.
SET /A COUNTER+=1 
11.
if defined VAR%COUNTER% GOTO :loop
Noch eine Variante (wieder mit fest vorgegebener Anzahl der Variablen):
01.
@echo off & setlocal enabledelayedexpansion 
02.
SET VAR1=defrag c 
03.
SET VAR2=ntbackup .... 
04.
SET VAR3=.... 
05.
 
06.
for /l %%i in (1,1,3) do (echo %%i) & call !var%%i!
Allen Versionen gemeinsam ist die "!"-Problematik der "delayedexpansion" - da "!" eine besonder Bedeutung erhält, wird es in der Verarbeitung von Texten/Variableninhalten einfach weggelassen - bei zwei "!" in einer Zeile auch der Teil dazwischen. Als Demo habe ich Deine "echo"-Zeile ein wenig variiert.

Grüße
bastla

[Edit] Na gut, wieder zu langsam ... [/Edit]
Bitte warten ..
Mitglied: itservice
13.02.2008 um 16:01 Uhr
..... es funktioniert !!!!!!! ....
VIELEN HERZLICHEN DANK an ALLE - SUPI

ausschlaggebend war:
@echo off & setlocal enabledelayedexpansion

das war mir wohl bekannt und hatte das bereits für die verzögerte Variablenauflösung in schleifen () im Kopf .... aber wie das immer so ist .... Blockade ... und 10.000 Augen sehen und wissen mehr als 9.998 - gottlob gibt es foren mit kompetenten Nutzern ....
DANKE Gruß Jörger
Bitte warten ..
Mitglied: itservice
13.02.2008 um 16:02 Uhr
..... es funktioniert !!!!!!! ....
VIELEN HERZLICHEN DANK an ALLE - SUPI

ausschlaggebend war:
@echo off & setlocal enabledelayedexpansion

das war mir wohl bekannt und hatte das bereits für die verzögerte Variablenauflösung in schleifen () im Kopf .... aber wie das immer so ist .... Blockade ... und 10.000 Augen sehen und wissen mehr als 9.998 - gottlob gibt es foren mit kompetenten Nutzern ....
DANKE Gruß Jörger
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Geschachtelte For Schleife Variable weiter benutzen
gelöst Frage von seb1212Batch & Shell4 Kommentare

Hallo zusammen, ich habe ein kleines Problem, im untenstehenden Code hat die Variable %Datum% in Zeile 13 leider keinen ...

Batch & Shell
Xcopy Auswertung in Variable speichern
Frage von NightythehawkBatch & Shell10 Kommentare

Hallo Admins & Co, bin gerade auf der Suche nach einer Möglichkeit die Auswertung meiner Batchdatei in eine Variable ...

Batch & Shell
Zippen von Dateien in Variablen Verzeichnissen - geschachtelte FOR-Schleife
gelöst Frage von misterjoBatch & Shell5 Kommentare

Hallo zusammen, Das ist mein erster Eintrag hier. Ich hoffe, dass ihr mir helfen könnt. Ich habe folgende Ausgangssituation: ...

Windows 7
Geschachtelte virtuelle Festplatte
Frage von ThierryHenryWindows 75 Kommentare

Hallo Habe hier etwas gelesen und wollte wissen was genau eine geschachtelte virtuelle Festplatte ist, was mir das bringt ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell16 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Hardware
Fujitsu Workstation mit K80 und Quadro P5000, Fehlermeldung: Connect Power Adapter
Frage von MachelloHardware7 Kommentare

Hallo Zusammen, ich benötige euren Rat da ich ratlos bin. Folgende Konfiguration im Büro: Fujitsu Workstation Celcius R940 Power ...