Batch vs. Powershell - Umgebungsvariablen als Parameter nutzen

OP #7332681
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?

OP #7332772
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

Angehängte Dateien:
Gast #7332783
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 :/

Gast #7332822
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren