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.
@ 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.
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.
@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.
> 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
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).
> (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
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 ;-)
ich kenne auch nur die Variante, eine zweite Batchdatei zu generieren. Oder natürlich cygwin installieren und endlich richtige Skripte schreiben können...
> 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.
>> Eine Alternative wäre vbscript bzw. jscript.
Kann man mit jscript auf einfach die serielle Schnittstelle zugreifen?
>> Eine Alternative wäre vbscript bzw. jscript.
Kann man mit jscript auch auf die serielle Schnittstelle zugreifen?
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.