www.mikrocontroller.net

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


Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eval ?

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Eine Alternative wäre vbscript bzw. jscript.

Kann man mit jscript auf einfach die serielle Schnittstelle zugreifen?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Eine Alternative wäre vbscript bzw. jscript.

Kann man mit jscript auch auf die serielle Schnittstelle zugreifen?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
Dim MSComm

Set MSComm = CreateObject("MSCommLib.MSComm")
MSComm.CommPort = 2
MSComm.PortOpen = True

' send text
MSComm.Output = "otput text to send"

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

Function GetData(w)
  Dim LoByte,HiByte
  LoByte = w And &HFF
  HiByte = (w And &HFF00&) \ &H100
  GetData = ChrB(HiByte) & ChrB(LoByte)
End Function 

Das ist jetzt zwar vbscript, aber das Konzept ist in jscript dasselbe.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.