Qual é a diferença entre
SETX
eSET
?
Pelo meu entendimento:
ambos são usados para definir variáveis de ambiente
SETX
e 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.
set
modifica 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.
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ê 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.
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=value
definirá variáveis para o processo filho cmd.exe
que ele cria (que se anexa à cmd.exe
janela 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 set
depois 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.exe
atualizam dinamicamente suas variáveis de ambiente (ao contrário da maioria dos outros aplicativos), portanto, quando você setx
não atualizará o ambiente do processo atual, apenas o registro, que é lido por explorer.exe
, ou pelo explorer.exe
processo é atualizado pela função API do Windows que define a variável de ambiente (menos provável), de forma que future open cmd.exe
s herde explorer.exe
o ambiente, pois são filhos.