Jaka jest różnica między SETX i SET w zmiennych środowiskowych w systemie Windows

63

Jaka jest różnica między SETXi SET?

Według mojego zrozumienia:
Oba są używane do ustawiania zmiennych środowiskowych
SETXdla zmiennych użytkownika.
SETjest dla zmiennych powłoki.

Premraj
źródło
3
Spróbuj SET /?i SETX /?- to powinno dać ci kilka pomysłów.
Iszi
2
Zobacz także SS64 odniesienia dla SET i SETX . SS64 jest doskonałym źródłem poleceń dla kilku języków i środowisk poleceń - uważam, że jest to szczególnie przydatne w CMD i PowerShell.
Iszi

Odpowiedzi:

83

Obawiam się, że to nie jest takie proste. Jak sugerujesz, zmienne środowiskowe nie są ograniczone zakresem, ale masz rację, że czas życia wartości w zmiennej jest inny podczas porównywania czasowników.

Setmodyfikuje wartości środowiska bieżącej powłoki (okna), a zmiana jest dostępna natychmiast, ale jest tymczasowa. Zmiana nie wpłynie na inne uruchomione powłoki, a jak tylko zamkniesz powłokę, nowa wartość zostanie utracona do czasu ponownego uruchomienia zestawu.

setxmodyfikuje wartość na stałe, co wpływa na wszystkie przyszłe powłoki, ale nie modyfikuje środowiska uruchomionych już powłok. Musisz opuścić powłokę i ponownie ją otworzyć, zanim zmiana będzie dostępna, ale wartość pozostanie zmodyfikowana, dopóki nie zmienisz jej ponownie.

Zobacz tutaj przykład: http://batcheero.blogspot.com/2008/02/set-and-setx.html

Frank Thomas
źródło
13
to bardzo dobrze napisane, dodałbym jednak, że setx zmienia rejestr
barlop
To jest nawet mniej proste niż opisano tutaj. Należy pamiętać o „zmiennych” zmiennych środowiskowych. W niektórych przypadkach lista zmiennych wyświetlanych przez polecenie SET będzie się różnić w zależności od tego, czy użytkownik wywołał wiersz polecenia „podniesiony”, czy nie.
kreemoweet
10

Właściwie możemy ustawić zmienną w trzech zakresach:
1. Powłoka
2. Użytkownik
3. System (Maszyna) lub Globalny

ZESTAW: Utwórz lub zaktualizuj bieżący zakres powłoki na tymczasowy.

C:\Users\977246>set /?
Displays, sets, or removes cmd.exe environment variables.

SET [variable=[string]]

  variable  Specifies the environment-variable name.
  string    Specifies a series of characters to assign to the variable.

Type SET without parameters to display the current environment variables.

SETX: Utwórz lub zaktualizuj bieżące zmienne środowiskowe użytkownika dla opcji permanent.

C:\Users\977246>setx /?

SetX has three ways of working:

Syntax 1:
    SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]

Syntax 2:
    SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]

Syntax 3:
    SETX [/S system [/U [domain\]user [/P [password]]]]
         /F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]

Description:
    Creates or modifies environment variables in the user or system
    environment. Can set variables based on arguments, regkeys or
    file input.

To remove the variable set value to empty string as follows

Example: setx path ""

W GUI Zmienne środowiskowe użytkownika i systemu.

wprowadź opis zdjęcia tutaj

Premraj
źródło
3

Dodanie punktu, który został pominięty przez innych użytkowników.

Aby ustawić zmienną środowiska systemowego zamiast zmiennej środowiska użytkownika, wystarczy użyć opcji / mw poleceniu setx i uruchomić ją z wiersza polecenia z podwyższonym poziomem uprawnień (administratora).

setx variable value /m

Przykład: Otwórz wiersz polecenia jako administrator i uruchom

setx Path "%Path%;C:\Users\User\Libs" /m

Objaśnienie: Powyższe polecenie doda „C: \ Users \ User \ Libs” do już istniejącej zmiennej ścieżki (zmiennej środowiska systemowego).

Bez argumentu / m wprowadzi zmiany lub utworzy tylko zmienną ścieżki na poziomie użytkownika.

Z instrukcji obsługi setx

/ M Określa, że ​​zmienna powinna być ustawiona w środowisku systemowym (HKEY_LOCAL_MACHINE). Domyślnie ustawia się zmienną w środowisku HKEY_CURRENT_USER.

Renju Jose
źródło