Batch vs. Powershell - Umgebungsvariablen als Parameter nutzen

OP #7332681

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

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

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 :/

#7332802

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.

Gast #7332822

Ü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

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.