Forum: Mikrocontroller und Digitale Elektronik Batch vs. Powershell - Umgebungsvariablen als Parameter nutzen


von Tom W. (nericoh)


Lesenswert?

Hallo zusammen!

Ich versuche eine (meinem Empfinden nach sehr simple) Aufgabe, die 
bisher durch Batch-Files gelöst wurde, auf Powershell "umzustellen" - 
scheitere aber schon an ganz elementaren Dingen. Da auch Google nichts 
hilfreiches dazu liefert scheine ich schon vom Ansatz her nen 
Verständnisproblem zu haben. Vllt kann mir jemand auf die Sprünge 
helfen:

bei der Batch-Lösung werden zunächst einige Umgebungsvariablen gesetzt, 
mit denen dann später gearbeitet wird:

set LINTINSTPATH=C:\PC-Lint

set LINTCFGPATH=C:\PC-Lint\Cfg

Anschließend kann ich die so gesetzten Umgebungsvariablen beim Aufruf 
einer EXE verwenden:

"%LINTINSTPATH%\LINT-NT.EXE" +v -i%LINTCFGPATH% Module.lnt


Nun versuche ich das gleiche mit Powershell:

$Env:LINTINSTPATH="C:\PC-Lint"

$Env:LINTCFGPATH="C:\PC-Lint\Cfg"

&$Env:LINTINSTPATH\LINT-NT.EXE +v -i$Env:LINTCFGPATH Module.lnt

Als Ergebnis bekomme ich:
Error 307: Can't open indirect file 'Module.lnt'

Wenn ich dagegen im Aufruf der EXE $Env:LINTCFGPATH durch C:\PC-Lint\Cfg 
ersetze funktioniert es:

&$Env:LINTINSTPATH\LINT-NT.EXE +v -i"C:\PC-Lint\Cfg" Module.lnt

Was mache ich falsch? Wie kann ich $Env:LINTCFGPATH richtig dem 
-i-Parameter mitgeben?

von Tom W. (nericoh)


Angehängte Dateien:

Lesenswert?

Ein Arbeitskollege hat spaßeshalber mal ChatGPT mit meiner Frage hier 
gefüttert - seine (oder ihre?) Antwort habe ich als Bild angehangen.

Falls noch jemand das gleiche Problem hat: in Powershell muss die 
Umgebungsvariable in "" gesetzt werden, damit sie als String erkannt und 
behandelt wird:

&$Env:LINTINSTPATH\LINT-NT.EXE +v -i"$Env:LINTCFGPATH" Module.lnt

: Bearbeitet durch User
von jojo (Gast)


Lesenswert?

Interessant, auch die Antwort von ChatGPT, krass.

Hier ist ein ähnlicher Thread mit 1, 2 nützlichen Tipps: 
https://stackoverflow.com/questions/41047123/powershell-concatenate-an-environment-variable-with-path

Es ist immer eine Qual von CMD zu PWSH zu BASH zu Docker "BASH", blaaaa. 
Immer ist irgendwas mit dem escapen von Variablen... das nervt tierisch 
und frisst Zeit, aber ich fürchte da gibt es kein Allheilmittel :/

von Peter D. (peda)


Lesenswert?

Welchen Grund gibt es denn, von CMD auf Powershell zu wechseln?
Damit man die Syntax wieder nochmal neu lernen muß.

Im Explorer wird ja leider nicht mehr die CMD gestartet, also tippe ich 
in Powershell eben erstmal CMD ein. Der blaue Hintergrund bleibt leider.

von Zeno (Gast)


Lesenswert?

Üblicherweise wird zwischen dem Parameterbezeichner, in Deinem Fall "-i" 
und dem eigentlichen Parameterwert ein Leerzeichen geschrieben. Also so:
&$Env:LINTINSTPATH\LINT-NT.EXE +v -i $Env:LINTCFGPATH Module.lnt

Tom W. schrieb:
> Falls noch jemand das gleiche Problem hat: in Powershell muss die
> Umgebungsvariable in "" gesetzt werden, damit sie als String erkannt und
> behandelt wird:
>
> &$Env:LINTINSTPATH\LINT-NT.EXE +v -i"$Env:LINTCFGPATH" Module.lnt
Das müßte dann aber auf die erste Variable genauso zutreffen und diese 
müßte ebenfalls in "" kommen. Bei Deiner Schreibweise kann er 
schlichtweg nicht das -i vom Rest trennen.

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.