Qual è la differenza tra SETX e SET nelle variabili di ambiente in Windows


63

Qual è la differenza tra SETXe SET?

Secondo la mia comprensione:
entrambi vengono utilizzati per impostare le variabili di ambiente
SETXsia per le variabili utente.
SETè per le variabili della shell.


3
Prova SET /?e SETX /?- questo dovrebbe darti alcune idee.
Iszi,

2
Inoltre, consultare i riferimenti SS64 per SET e SETX . SS64 è un ottimo riferimento di comando per diverse lingue e ambienti di comando: lo trovo particolarmente utile per CMD e PowerShell.
Iszi,



Risposte:


83

Temo che non sia così semplice. Le variabili di ambiente non sono limitate dall'ambito, come suggerisci, ma hai ragione nel dire che la durata del valore nella variabile è diversa quando si confrontano i verbi.

Setmodifica i valori dell'ambiente della shell corrente (la finestra) e la modifica è immediatamente disponibile, ma è temporanea. La modifica non influirà su altre shell in esecuzione e non appena si chiude la shell, il nuovo valore viene perso fino a quando non si esegue nuovamente l'impostazione.

setxmodifica il valore in modo permanente, il che influisce su tutte le shell future, ma non modifica l'ambiente delle shell già in esecuzione. Devi uscire dalla shell e riaprirla prima che la modifica sia disponibile, ma il valore rimarrà modificato fino a quando non lo cambi nuovamente.

Vedi qui per un esempio: http://batcheero.blogspot.com/2008/02/set-and-setx.html


13
che è scritto molto bene, aggiungerei però, che setx modifica il registro
barlop

In realtà è anche meno semplice di quanto descritto qui. Ci sono variabili d'ambiente "volatili" di cui tenere conto. E, in alcune circostanze, l'elenco delle variabili mostrate dal comando SET differirà a seconda che l'utente abbia invocato o meno un prompt dei comandi "elevato".
kreemoweet,

10

In realtà possiamo impostare la variabile su tre ambiti:
1. Shell
2. Utente
3. Sistema (macchina) o globale

SET: Crea o aggiorna l'ambito della shell corrente per un periodo temporaneo.

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: crea o aggiorna le variabili di ambiente dell'utente corrente per permanente.

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 ""

In utente GUI e variabili di ambiente di sistema.

inserisci qui la descrizione dell'immagine


3

Aggiunta di un punto perso da altri risponditori.

Per impostare una variabile di ambiente di sistema anziché una variabile di ambiente utente, è sufficiente utilizzare l'opzione / m nel comando setx ed eseguirla da un prompt dei comandi elevato (amministratore).

setx variable value /m

Esempio: aprire il prompt dei comandi come amministratore ed eseguire

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

Spiegazione: Il comando precedente aggiungerà "C: \ Users \ User \ Libs" alla variabile Path già esistente (variabile di ambiente di sistema).

Senza l' argomento / m , modificherà o creerà solo una variabile Path a livello di utente.

Dal manuale utente setx,

/ M Specifica che la variabile deve essere impostata nell'ambiente di sistema (HKEY_LOCAL_MACHINE). L'impostazione predefinita è impostare la variabile nell'ambiente HKEY_CURRENT_USER.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.