Manipulação com variáveis ​​de ambiente de usuário e sistema a partir da linha de comando no Windows 10

Manipulação com variáveis ​​de ambiente de usuário e sistema a partir da linha de comando no Windows 10

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:

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

  1. Como setxdiz 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 OCVLIBDIRarquivo 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.exepode adicionar, alterar e excluir entradas do registro. As variáveis ​​de ambiente residem no registro.Esta respostafala sobre como usar regpara 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 CMDtrata 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.)

informação relacionada