Manipulación con variables de entorno de usuario y sistema desde línea de comando en Windows 10

Manipulación con variables de entorno de usuario y sistema desde línea de comando en Windows 10

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:

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

  1. Como dice la ayuda para setxel 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 , OCVLIBDIRno 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 ( $nulles 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.exePuede agregar, cambiar y eliminar entradas de registro. Las variables de entorno viven en el registro.esta respuestahabla sobre el uso regpara 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

( HKCUes intercambiable con HKEY_CURRENT_USER. HKLMes intercambiable con HKEY_LOCAL_MACHINE.)

(Tenga en cuenta que CMDtrata 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).

información relacionada