Qual é a diferença entre SETX e SET em variáveis ​​de ambiente no Windows

63

Qual é a diferença entre SETXe SET?

Conforme meu entendimento:
Ambos são usados ​​para definir variáveis ​​de ambiente
SETXé para variáveis ​​de usuário.
SETé para variáveis ​​de shell.

Premraj
fonte
3
Tente SET /?e SETX /?- isso deve lhe dar algumas idéias.
Iszi 19/05
2
Além disso, consulte as referências SS64 para SET e SETX . O SS64 é uma excelente referência de comando para vários idiomas e ambientes de comando - acho particularmente útil para o CMD e o PowerShell.
Iszi

Respostas:

83

Receio que não seja tão simples assim. As variáveis ​​de ambiente não são limitadas pelo escopo, como você sugere, mas você está certo de que a vida útil do valor na variável é diferente ao comparar os verbos.

Setmodifica os valores atuais do ambiente do shell (a janela) e a alteração está disponível imediatamente, mas é temporária. A alteração não afetará outros shells em execução e, assim que você fechar o shell, o novo valor será perdido até que você execute o conjunto novamente.

setxmodifica o valor permanentemente, o que afeta todos os shells futuros, mas não modifica o ambiente dos shells já em execução. Você precisa sair do shell e reabri-lo antes que a alteração esteja disponível, mas o valor permanecerá modificado até você alterá-lo novamente.

Veja aqui um exemplo: http://batcheero.blogspot.com/2008/02/set-and-setx.html

Frank Thomas
fonte
13
que é muito bem escrito, gostaria de acrescentar, porém, que setx muda o registro
barlop
Na verdade, é ainda menos simples do que o descrito aqui. Existem variáveis ​​de ambiente "voláteis" a serem consideradas. E, em algumas circunstâncias, a lista de variáveis ​​mostradas pelo comando SET será diferente, dependendo de o usuário ter chamado ou não um prompt de comando "elevado".
precisa saber é o seguinte
10

Na verdade, podemos definir variáveis ​​em três escopos:
1. Shell
2. Usuário
3. Sistema (Máquina) ou Global

SET: Crie ou atualize o escopo do shell atual para temporário.

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: crie ou atualize as variáveis ​​de ambiente do usuário atual para 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 ""

Nas variáveis ​​de ambiente Usuário e Sistema da GUI.

insira a descrição da imagem aqui

Premraj
fonte
3

Adicionando um ponto que foi perdido por outros respondentes.

Para definir uma variável de ambiente do sistema em vez de uma variável de ambiente do usuário, basta usar a opção / m no comando setx e executá-la em um prompt de comando elevado (administrador).

setx variable value /m

Exemplo: abra o prompt de comando como administrador e execute

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

Explicação: O comando acima anexará "C: \ Users \ User \ Libs" à variável de caminho já existente (variável de ambiente do sistema).

Sem o argumento / m , ele fará alterações ou criará apenas uma variável de caminho no nível do usuário.

No manual do usuário setx,

/ M Especifica que a variável deve ser definida no ambiente do sistema (HKEY_LOCAL_MACHINE). O padrão é definir a variável no ambiente HKEY_CURRENT_USER.

Renju Jose
fonte