Forum: PC Hard- und Software indirekt Variablen ansprechen in Windows Batchsprache


von Jens G. (jensig)


Lesenswert?

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.

von zwieblum (Gast)


Lesenswert?

eval ?

von Jens G. (jensig)


Lesenswert?

@  zwieblum (Gast)

> eval ?

eval ? In der Windows Batchsprache? Ich dachte, das gibt's nur beim Unix 
Shell Scripting?
Die Windowshilfe scheint das jedenfalls nicht zu kennen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ruf mal in der Kommandozeile folgendes auf:

  set help

Und lies Dir den Abschnitt über die "Verzögerte Erweiterung der 
Umgebungsvariablen" durch.

Das sollte helfen.

von Jens G. (jensig)


Lesenswert?

@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.

von Ralf (Gast)


Lesenswert?

> 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

von Jens G. (jensig)


Lesenswert?

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).

von Peter (Gast)


Lesenswert?

> (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

von Jens G. (jensig)


Lesenswert?

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 ;-)

von Klaus W. (mfgkw)


Lesenswert?

ich kenne auch nur die Variante, eine zweite Batchdatei zu generieren.
Oder natürlich cygwin installieren und endlich richtige Skripte 
schreiben können...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Martin (Gast)


Lesenswert?

>> Eine Alternative wäre vbscript bzw. jscript.

Kann man mit jscript auf einfach die serielle Schnittstelle zugreifen?

von Martin (Gast)


Lesenswert?

>> Eine Alternative wäre vbscript bzw. jscript.

Kann man mit jscript auch auf die serielle Schnittstelle zugreifen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

Hallo Rufus,

jetzt bin ich doch überrascht, daß dies so relativ einfach geht. Danke 
für die Routinen. Schau ich mir gleich auf dem PC an.

Martin

von Jens G. (jensig)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.