Jak ustawić zmienne środowiskowe dla pojedynczego polecenia w systemie Windows? [duplikować]

22

Czy istnieje sposób na ustawienie zmiennych środowiskowych dla pojedynczego polecenia w systemie Windows, tak jak w systemie ENVVAR=abc commandUnix?

setWydaje się, że zmienne ustawione przez polecenie w Windows pozostają dla następujących poleceń, ale nie tego chcę.

谷口 昂 平
źródło
Myślę, że będziesz musiał sam je rozbroić.
Zina,

Odpowiedzi:

29

Czy istnieje sposób ustawienia zmiennych środowiskowych dla pojedynczego polecenia?

Z bieżącej cmdpowłoki:

Musisz samodzielnie wyczyścić zmienną.

set ENVVAR=abc && dir & set ENVVAR=

Z pliku wsadowego:

Możesz użyć setlocali endlocal.

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

Użyj cmdpowłoki potomnej:

Możesz użyć cmd /cdo utworzenia powłoki potomnej.

Zmienna jest ustawiona w powłoce podrzędnej i nie wpływa na powłokę nadrzędną (jak wskazano w komentarzu jpmc26 ).

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

Dalsza lektura

  • Indeks AZ wiersza polecenia systemu Windows CMD - doskonałe odniesienie do wszystkich rzeczy związanych z wierszem cmd systemu Windows.
  • cmd - Uruchom nową powłokę CMD i (opcjonalnie) uruchom polecenie / program wykonywalny.
  • endlocal - Zakończ lokalizację zmian środowiska w pliku wsadowym. Przekaż zmienne z jednego pliku wsadowego do drugiego.
  • przekierowanie - operatory przekierowania.
  • set - Wyświetl, ustaw lub usuń zmienne środowiskowe CMD. Zmiany wprowadzone za pomocą SET pozostaną tylko przez czas trwania bieżącej sesji CMD.
  • setlocal - Ustaw opcje kontrolujące widoczność zmiennych środowiskowych w pliku wsadowym.
DavidPostill
źródło
Inną opcją jest uruchomienie osobnego cmdprocesu i ustawienie go tam. Np cmd /C "set ENVVAR=abc && dir". Ponieważ nie wpłynie to na proces nadrzędny, zostanie skutecznie „wyczyszczony” przy wyjściu.
jpmc26
@ jpmc26 Dobry. Dzięki. Dodano do odpowiedzi.
DavidPostill
Ta pierwsza metoda nie wyczyści zmiennej, jeśli polecenie się nie powiedzie.
nikt nie
@AndrewMedico Thanks. Słuszna uwaga. Odpowiedź naprawiona.
DavidPostill