He estado usando los siguientes comandos para configurar/eliminar variables de entorno de usuario/sistema:
SISTEMA:
setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"
USUARIO:
setx VAR1 "CONTENT OF VAR1"
Más tarde encontré esas limitaciones:
- Si
%PATH%
es demasiado largo, aparece la siguiente advertencia y la%PATH%
variable se trunca:
ADVERTENCIA: Los datos que se guardan se truncan a 1024 caracteres.
- Como dice la ayuda para
setx
el comando:
Cuando utiliza Setx.exe para borrar el valor de una variable de entorno, el nombre de la variable de entorno no se ve afectado
setx -m OCVLIBDIR ""
En otras palabras, cuando lo ejecuto , OCVLIBDIR
no se eliminará sino que se vaciará.
¿Cómo puedo superar esas limitaciones?
PD: prefiero las herramientas que forman parte de Windows 10 (por ejemplo, PowerShell), pero no es un problema usar también herramientas de terceros (aunque me parece excesivo).
PPS: Sé que es posible editar variables a través de la GUI de Windows, registros o algunas herramientas GUI de terceros, pero prefiero los scripts porque puedo crear scripts para múltiples escenarios y cambiar rápidamente entre ellos. Esto es útil cuando estoy experimentando con varias bibliotecas en mi sistema (por ejemplo, varias versiones de opencv, etc.).
Respuesta1
Potencia Shell
Este artículo de TechNetdescribe los conceptos básicos.
esta respuestadescribe cómo obtener variables de entorno del sistema frente al usuario (que solo se insinuó en el primer artículo). "Machine"
para el sistema, "User"
para el usuario actual y "Process"
para el proceso actual que funciona para obtener la combinación final de sistema/usuario.
Se habla de la concatenación de PowerShell enesta pregunta y sus respuestas. Puede ensamblar cadenas usando +
para concatenar o usar sustitución como en "{0} {1}" -f "Hello","World"
.
Los paréntesis se utilizan para agrupar construcciones.
Las variables no están tipificadas, no declaradas y comienzan con $
.
Poniéndolo todo junto obtendrás algo como:
$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")
O como una sola línea:
[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")
Este artículodescribe cómo eliminar variables de entorno ( $null
es una variable especial):
[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")
Los cambios en las variables de entorno realizados de esta manera están disponibles globalmente.
CMD
reg.exe
Puede agregar, cambiar y eliminar entradas de registro. Las variables de entorno viven en el registro.esta respuestahabla sobre el uso reg
para eliminar variables de entorno.
Para variables de entorno de usuario:
reg DELETE HKCU\Environment /v envvarname
Para variables de entorno del sistema:
reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname
( HKCU
es intercambiable con HKEY_CURRENT_USER
. HKLM
es intercambiable con HKEY_LOCAL_MACHINE
.)
(Tenga en cuenta que CMD
trata las variables de entorno vacías de la misma manera que las variables de entorno inexistentes. Sin embargo, entiendo que está intentando eliminar la variable del sistema).