Tenho usado os seguintes comandos para definir/remover variáveis de ambiente do usuário/sistema:
SISTEMA:
setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"
DO UTILIZADOR:
setx VAR1 "CONTENT OF VAR1"
Mais tarde, encontrei essas limitações:
- Se
%PATH%
for muito longo, recebo o seguinte aviso e a%PATH%
variável é truncada:
AVISO: Os dados salvos são truncados em 1.024 caracteres.
- Como
setx
diz a ajuda do comando:
Quando você usa Setx.exe para limpar um valor de variável de ambiente, o nome da variável de ambiente não é afetado
Em outras palavras, quando eu executo setx -m OCVLIBDIR ""
, o OCVLIBDIR
arquivo não será excluído, mas sim vazio.
Como posso superar essas limitações?
PS: Prefiro ferramentas que fazem parte do Windows 10 (por exemplo, PowerShell), mas não é problema usar também ferramentas de terceiros (embora me pareça um exagero).
PPS: Eu sei que é possível editar variáveis via GUI do Windows, registros ou algumas ferramentas GUI de terceiros, mas prefiro scripts porque posso criar scripts de vários cenários e alternar rapidamente entre eles. meu sistema (por exemplo, várias versões do opencv etc.).
Responder1
PowerShell
Este artigo do TechNetdescreve o básico.
Esta respostadescreve a obtenção de variáveis de ambiente do sistema versus usuário (o que foi apenas sugerido no primeiro artigo). "Machine"
para sistema, "User"
para o usuário atual e "Process"
para o processo atual que funciona para obter a combinação final sistema/usuário.
A concatenação do PowerShell é discutida emesta pergunta e suas respostas. Você pode montar strings usando +
para concatenar ou usar substituição como em "{0} {1}" -f "Hello","World"
.
Parênteses são usados para agrupar construções.
As variáveis não são digitadas, não são declaradas e começam com $
.
Juntando tudo, você obtém algo como:
$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")
Ou como uma linha:
[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")
Este artigodescreve como excluir variáveis de ambiente ( $null
é uma variável especial):
[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")
As alterações nas variáveis de ambiente feitas desta forma estão disponíveis globalmente.
DMC
reg.exe
pode adicionar, alterar e excluir entradas do registro. As variáveis de ambiente residem no registro.Esta respostafala sobre como usar reg
para excluir variáveis de ambiente.
Para variáveis de ambiente do usuário:
reg DELETE HKCU\Environment /v envvarname
Para variáveis de ambiente do sistema:
reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname
( HKCU
é intercambiável com HKEY_CURRENT_USER
. HKLM
é intercambiável com HKEY_LOCAL_MACHINE
.)
(Observe que CMD
trata variáveis de ambiente vazias da mesma forma que variáveis de ambiente inexistentes. Entendo, porém, que você está tentando eliminar a variável do sistema.)