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

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

Qual é a diferença entre SETXe SET?

Pelo meu entendimento:
ambos são usados ​​para definir variáveis ​​de ambiente
SETXe para variáveis ​​de usuário.
SETé para variáveis ​​​​de shell.

Responder1

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

setmodifica os valores de ambiente do shell atual (a janela) e a alteração fica 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 set 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ê deve 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:http://batcheero.blogspot.com/2008/02/set-and-setx.html

Responder2

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 temporariamente.

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 atuais 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 do usuário e do sistema da GUI.

insira a descrição da imagem aqui

Responder3

Adicionando um ponto que foi esquecido 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 anexará "C:\Users\User\Libs" à variável de caminho já existente (variável de ambiente do sistema).

Sem o/margumento, 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 de todo o sistema (HKEY_LOCAL_MACHINE). O padrão é definir a variável no ambiente HKEY_CURRENT_USER.

Responder4

setx.exeé um programa que define variáveis ​​de ambiente do usuário/sistema noregistro, que é usado para criação de processos futuros. seté um comando que mostra oprocessovariáveis ​​de ambiente no ambiente no bloco de parâmetros no PEB do processo atual (que mostram as variáveis ​​do usuário e do sistema, bem como as variáveis ​​definidas pelos processos atuais ou pai usando set), além de permitir que mais variáveis ​​sejam definidas nele por o processo atual e as mudanças no ambiente podem ser visualizadas no Process Explorer.

cmd /c set variable=valuedefinirá variáveis ​​para o processo filho cmd.exeque ele cria (que se anexa à cmd.exejanela do console pai e não aloca as suas próprias, e herda o ambiente do pai) para que não tenha efeito quando você executar setdepois disso na mesma janela, porque se refere ao processo pai cmd.exe. Os processos de nível superior herdam seu ambiente diretamente do registro e explorer.exeatualizam dinamicamente suas variáveis ​​de ambiente (ao contrário da maioria dos outros aplicativos), portanto, quando você setxnão atualizará o ambiente do processo atual, apenas o registro, que é lido por explorer.exe, ou pelo explorer.exeprocesso é atualizado pela função API do Windows que define a variável de ambiente (menos provável), de forma que future open cmd.exes herde explorer.exeo ambiente, pois são filhos.

informação relacionada