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

46

What is the difference between SETX and SET?

De acordo com o 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.

    
por Premraj 19.05.2015 / 14:23

3 respostas

70

Eu temo 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 o tempo de vida do valor na variável é diferente ao comparar os verbos.

Set modifica os valores de ambiente do shell atual (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 set novamente.

setx modifica 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é que você o altere novamente.

Veja aqui um exemplo: link

    
por 19.05.2015 / 14:31
7

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

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

C:\Users7246>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: Cria ou atualiza as variáveis de ambiente do usuário atual para permanente.

C:\Users7246>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 GUI User e System.

    
por 23.09.2015 / 08:53
1

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, precisamos apenas usar a opção / m no comando setx e executá-la a partir de 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 irá 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 do setx,

/M Specifies that the variable should be set in the system wide (HKEY_LOCAL_MACHINE) environment. The default is to set the variable under the HKEY_CURRENT_USER environment.

    
por 25.04.2018 / 12:14