indirekt Variablen ansprechen in Windows Batchsprache

OP #1412517
Hi,
kann man in der "normalen" Batchsprache von Windows Variablennamen zur 
Laufzeit generieren, und diese dann nutzen?
Also so in der Art wie (nur zur Veranschaulichung - geht nicht wirklich 
so)

set var0=%var1(%var2%)%

Also der Wert von var2 soll aufgelöst werden, und an den Namen von var1 
angehängt werden, und der Wert dieser neuen Variable wird dann genutzt, 
um var0 zu füllen.

Danke.
OP #1413590
@Rufus t. Firefly

Du meinst

  help set

Diese verzögerte Erweiterung scheint aber nicht so richtig zu passen für 
mein Problem. Die verzögerte Erweiterung legt je nur fest, wann eine 
Variable aufgelöst wird. Das scheint aber nicht zu helfen, um einen 
Variablennamen zur Laufzeit zu generieren/modifizieren, bzw. diesen 
Namen dann auch als Variable nutzen zu können.
Gast #1413793
> Das scheint aber nicht zu helfen, um einen Variablennamen zur Laufzeit zu > 
generieren/modifizieren, bzw. diesen Namen dann auch als Variable nutzen
> zu können.
Ohne mich jetzt genauer damit beschäftigt zu haben würde ich sagen, dass

SET ABC = 1234

die "Variable" ABC mit dem Wert 1234 anlegt. Der erste Teil deines 
Satzes wär somit abgehandelt :)

Das Umdefinieren/Neudefinieren dürfte dann wohl kein Problem sein, 
sofern das möglich ist...

Ralf
OP #1414701
ich will nicht den Inhalt einer Variablen manipulieren (das ist kein 
Problem), sondern will VariablenNAMEN zur Laufzeit generieren (und diese 
dann natürlich füllen).
Z.B., ich habe mehrere Variablen, mit demselben Stammnamen, aber hinten 
eine (laufende) Nummer dran (also z.B. Status0 bis Status9). Diese will 
ich dann z.B. zur Laufzeit nacheinander ansprechen - aber nicht stur mit 
separaten Zeilen für jede dieser Variablen, sondern in einer Schleife, 
wo ich immer nur Status%X% schreiben will, wobei %X% dynamisch zur 
Laufzeit ermittelt wird.
Eigentlich könnte man das auch mit Arrays mit Indexzugriffen machen - 
aber das kennt wohl die Windows-Batchsprache leider auch nicht.
Ich weis, daß diese Batchsprache sehr beschränkt ist - aber vielleicht 
hatte ja mal jemand bereits an solch einem Problem gefeilt, und hat eine 
Lösungsvariante (oder auch Krücken).
Gast #1414707
> (oder auch Krücken).
ja du kannst mit der ersten batch datei ein 2. Batch-Datei schreiben und 
dort die Variablen generieren.


echo stam_%xx%=23 > batch2.cmd
OP #1416385
ja - so in etwa hatte ich es früher auch mal gemacht, als ich mal einen 
"Startmanager für Win311" gebastelt hatte (vor 15 Jahren oder so). Aber 
genau diese Krücke wollte ich jetzt mal nicht nutzen - ich möchte 
möglichst nur in dem einen Scriptfile bleiben.
(konnte ja keiner ahnen, daß doch einer auf diese Idee hier kommt ;-)
Persönliche Seite #1416467
> Oder natürlich cygwin installieren und endlich richtige Skripte
> schreiben können...

Eine Alternative wäre vbscript bzw. jscript. Das kann jedes auch nur 
mäßig neuzeitliche Windows ohne die Installation zusätzlicher Dinge 
ausführen, und damit kann man auch einiges anstellen.

Neuere Windows-Systeme bieten obendrein die sogenannte PowerShell.
Persönliche Seite #1416578
Auf die gleiche "komfortable" Art und Weise, wie man es aus Batchdateien 
her kennt. Oder, wenn ein ActiveX-Control wie z.B. mscomm.ocx 
installiert ist, auch mit erweiterten Möglichkeiten:
1
Dim MSComm
2

3
Set MSComm = CreateObject("MSCommLib.MSComm")
4
MSComm.CommPort = 2
5
MSComm.PortOpen = True
6

7
' send text
8
MSComm.Output = "otput text to send"
9

10
'send binary data
11
MSComm.Output = GetData(4321) & GetData(0) & _
12
GetData(1234) & GetData(0) & GetData(2345)
13

14
Function GetData(w)
15
  Dim LoByte,HiByte
16
  LoByte = w And &HFF
17
  HiByte = (w And &HFF00&) \ &H100
18
  GetData = ChrB(HiByte) & ChrB(LoByte)
19
End Function

Das ist jetzt zwar vbscript, aber das Konzept ist in jscript dasselbe.
OP #1417039
Ok, da hat wenigstens ein anderer seine Lösung bekommen - auch nicht 
schlecht ;-)
Ok, also ich gehe mal davon aus, daß mein Anliegen wohl nicht anders 
machbar ist als über weitere dynamisch erzeugte externe Files.
Danke an alle.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.