Wie legen Sie Umgebungsvariablen für einen einzelnen Befehl unter Windows fest? [Duplikat]

20

Gibt es eine Möglichkeit, Umgebungsvariablen für einen einzelnen Befehl unter Windows wie ENVVAR=abc commandunter Unix festzulegen?

Unter setWindows unter Befehl festgelegte Variablen scheinen für die folgenden Befehle erhalten zu bleiben, aber das ist nicht das, was ich will.

谷口 昂 平
quelle
Ich denke, Sie müssen sie selbst deaktivieren.
Zina

Antworten:

28

Gibt es eine Möglichkeit, Umgebungsvariablen für einen einzelnen Befehl festzulegen?

Aus der aktuellen cmdShell:

Sie müssen die Variable selbst löschen.

set ENVVAR=abc && dir & set ENVVAR=

Aus einer Batch-Datei:

Sie können setlocalund verwenden endlocal.

@echo off
setlocal 
  set ENVVAR=abc && dir
endlocal

Verwenden Sie eine untergeordnete cmdShell:

Sie können cmd /cdamit eine untergeordnete Shell erstellen.

Die Variable wird in der untergeordneten Shell festgelegt und wirkt sich nicht auf die übergeordnete Shell aus (wie in einem Kommentar von jpmc26 ausgeführt ).

cmd /C "set ENVVAR=abc && dir"

Weiterführende Literatur

  • Ein AZ-Index der Windows CMD-Befehlszeile - Eine hervorragende Referenz für alle Windows-Cmd-Zeilen.
  • cmd - Starten Sie eine neue CMD-Shell und führen Sie (optional) ein Befehls- / ausführbares Programm aus.
  • endlocal - Beendet die Lokalisierung von Umgebungsänderungen in einer Batchdatei. Übergeben Sie Variablen von einer Batchdatei an eine andere.
  • Umleitung - Umleitungsoperatoren.
  • set - CMD-Umgebungsvariablen anzeigen, einstellen oder entfernen. Mit SET vorgenommene Änderungen bleiben nur für die Dauer der aktuellen CMD-Sitzung erhalten.
  • setlocal - Legen Sie Optionen fest, um die Sichtbarkeit von Umgebungsvariablen in einer Batchdatei zu steuern.
DavidPostill
quelle
Eine andere Möglichkeit besteht darin, einen separaten cmdProzess zu starten und dort festzulegen. ZB , cmd /C "set ENVVAR=abc && dir". Da es den übergeordneten Prozess nicht beeinflusst, wird es beim Beenden effektiv "gelöscht".
jpmc26
@ jpmc26 Gut. Vielen Dank. Zur Antwort hinzugefügt.
DavidPostill
Diese erste Methode löscht die Variable nicht, wenn der Befehl fehlschlägt.
niemand
@ AndrewMedico Danke. Guter Punkt. Antwort behoben.
DavidPostill