Todo lo que necesitas saber para ver, crear, editar y gestionar variables de entorno del sistema y del usuario — desde la interfaz gráfica hasta PowerShell.
Las variables de entorno son pares clave-valor con nombre que almacena el sistema operativo con información de configuración utilizada por programas, scripts y el propio intérprete de comandos. Puedes imaginarlas como un registro de ajustes global que cualquier proceso en ejecución puede consultar, sin necesidad de codificar rutas o valores directamente en el código.
Por ejemplo, la conocida variable PATH le indica a Windows dónde buscar cuando escribes un comando en el Símbolo del sistema. En lugar de escribir C:\Windows\System32\notepad.exe cada vez, simplemente escribes notepad, porque C:\Windows\System32 ya está incluido en PATH.
Las variables de entorno han sido parte esencial de Windows desde NT 3.1 y su comportamiento es prácticamente idéntico en Windows 10 y Windows 11. Los cuadros de diálogo de la interfaz gráfica lucen algo diferentes debido al rediseño visual de Windows 11, pero las ubicaciones en el registro, las reglas de herencia y las herramientas de línea de comandos funcionan exactamente igual.
Desarrolladores, administradores de sistemas y usuarios avanzados recurren a las variables de entorno para una amplia variedad de tareas: almacenar datos sensibles como claves de API fuera del código fuente, configurar el comportamiento en tiempo de ejecución de las aplicaciones sin recompilar, crear scripts portables que funcionen en cualquier máquina y definir rutas de instalación para herramientas como Python, Java, Node.js y Git.
Windows reconoce cuatro ámbitos distintos para las variables de entorno. Comprender el ámbito es fundamental, porque una variable definida en un nivel puede sobrescribir a otra, ser sobrescrita por ella o simplemente ser invisible desde otro nivel.
Se definen por cuenta de usuario. Se almacenan en HKCU\Environment en el registro. Solo están disponibles para los procesos que se ejecutan bajo ese usuario. Tienen prioridad sobre las variables de equipo con el mismo nombre (excepto PATH).
Se aplican a todos los usuarios del equipo. Se almacenan en HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Se requieren privilegios de Administrador para modificarlas.
Existen únicamente durante la ejecución de un proceso y sus procesos hijo. Se establecen con set en CMD o con $env: en PowerShell. Los cambios se descartan al finalizar el proceso.
Subconjunto especial almacenado en HKCU\Volatile Environment. Se crean de nuevo en cada inicio de sesión (p. ej., SESSIONNAME, LOGONSERVER). Se pierden al cerrar sesión y no son editables por el usuario.
En la mayoría de las variables, las variables de usuario tienen prioridad sobre las variables del sistema cuando ambas existen con el mismo nombre. La excepción más importante es PATH: Windows concatena el PATH del sistema y el PATH del usuario (primero el del sistema, luego el del usuario), de modo que ambos contribuyen al valor final que ve cualquier proceso en ejecución.
Existen varias formas de abrir el cuadro de diálogo de Variables de entorno. A continuación se muestran los métodos más fiables, todos compatibles con Windows 10 y Windows 11:
Win + R, escribe sysdm.cpl y pulsa Entrar.Win + S para abrir la búsqueda.Win + R para abrir el cuadro de diálogo Ejecutar.rundll32 sysdm.cpl,EditEnvironmentVariables y pulsa Entrar.rundll32 sysdm.cpl,EditEnvironmentVariables como acceso directo en el escritorio si editas variables de entorno con frecuencia. Es la ruta más rápida al cuadro de diálogo con un solo clic en cualquier sistema Windows 10/11.
La línea de comandos te ofrece acceso rápido y automatizable a los valores de las variables de entorno sin necesidad de abrir ningún cuadro de diálogo gráfico.
CMD — listar todas las variablesset
CMD — mostrar una variable concretaecho %VARIABLE_NAME%
echo %PATH%
echo %USERNAME%
CMD — filtrar variables por prefijoset APP_
Escribir set sin argumentos muestra todas las variables de entorno disponibles en el proceso actual. Escribir set PREFIJO (sin signo igual) lista todas las variables cuyo nombre comienza por ese prefijo — muy útil para comprobar rápidamente todas las variables relacionadas con JAVA_ o PYTHON.
PowerShell — listar todas las variablesGet-ChildItem Env:
PowerShell — leer una variable concreta$env:PATH
$env:USERNAME
$env:APPDATA
PowerShell — filtrar y formatearGet-ChildItem Env: | Where-Object { $_.Name -like "APP_*" }
Get-ChildItem Env: | Sort-Object Name | Format-Table -AutoSize
PowerShell — leer variable de usuario persistente desde el registro[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "User")
[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "Machine")
MY_APP_ROOT) y el Valor de la variable (p. ej., C:\MyApp).CMD — establecer una variable para la sesión actualset MY_VARIABLE=HolaMundo
set APP_ENV=production
CMD — eliminar una variable de la sesión actualset MY_VARIABLE=
CMD — crear una variable de usuario persistentesetx MY_VARIABLE "HolaMundo"
CMD — crear una variable del sistema persistente (requiere Admin)setx MY_VARIABLE "HolaMundo" /M
setx escribe en el registro y afecta a los procesos futuros, pero no actualiza el entorno de la sesión de CMD actual. Debes abrir una nueva ventana de CMD para ver el nuevo valor. Además, setx trunca silenciosamente los valores de más de 1.024 caracteres — un problema frecuente al añadir entradas a PATH.
La variable PATH es, con diferencia, la variable de entorno más importante y la que se modifica con más frecuencia. Es una lista de directorios separados por punto y coma que Windows recorre en orden cuando ejecutas un programa sin especificar su ruta completa.
Windows 10 y 11 incluyen un editor de PATH específico que muestra cada entrada en su propia línea, lo que facilita enormemente la gestión frente a editar manualmente la cadena de texto con punto y coma.
Path en la sección de usuario o del sistema.PowerShell — añadir al PATH de usuario de forma permanente$current = [System.Environment]::GetEnvironmentVariable("Path", "User")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "User")
PowerShell — añadir al PATH del sistema (ejecutar como Administrador)$current = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "Machine")
La clase .NET [System.Environment] de PowerShell y el proveedor Env: te ofrecen control total y automatizable sobre todos los ámbitos de las variables de entorno.
PowerShell — establecer una variable de usuario persistente[System.Environment]::SetEnvironmentVariable("API_KEY", "abc123xyz", "User")
PowerShell — establecer una variable del sistema persistente (requiere Admin)[System.Environment]::SetEnvironmentVariable("DB_HOST", "prod-db-01", "Machine")
PowerShell — eliminar una variable de usuario[System.Environment]::SetEnvironmentVariable("API_KEY", $null, "User")
PowerShell — establecer una variable solo para la sesión actual$env:MY_TEMP_VAR = "valor_temporal"
Remove-Item Env:MY_TEMP_VAR
PowerShell — exportar todas las variables de usuario a un archivoGet-ChildItem Env: | Export-Csv -Path "$HOME\env_backup.csv" -NoTypeInformation
PowerShell — importar variables desde un archivo .env (patrón habitual)Get-Content ".env" | ForEach-Object {
if ($_ -match "^([^#=]+)=(.*)$") {
[System.Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), "User")
}
}
WM_SETTINGCHANGE para que el Explorador y las nuevas ventanas de terminal recojan los cambios sin necesidad de cerrar sesión. Esta técnica la utilizan muchos instaladores, como Chocolatey y Scoop.
Windows incluye un amplio conjunto de variables de entorno predefinidas. Conocerlas ahorra tiempo y hace que los scripts sean portables entre distintas máquinas y usuarios.
| Variable | Valor típico | Descripción |
|---|---|---|
%USERNAME% |
juan.garcia |
Nombre de la cuenta del usuario que ha iniciado sesión actualmente. |
%USERPROFILE% |
C:\Users\juan.garcia |
Ruta completa a la carpeta de inicio del usuario actual. |
%APPDATA% |
C:\Users\juan.garcia\AppData\Roaming |
Carpeta de datos de aplicación itinerante del usuario actual. |
%LOCALAPPDATA% |
C:\Users\juan.garcia\AppData\Local |
Carpeta de datos de aplicación local (no itinerante). |
%TEMP% / %TMP% |
C:\Users\juan.garcia\AppData\Local\Temp |
Directorio de archivos temporales. Se puede limpiar periódicamente sin problemas. |
%SYSTEMROOT% |
C:\Windows |
Directorio raíz de la instalación de Windows. |
%SYSTEMDRIVE% |
C: |
Letra de unidad de la unidad del sistema. |
%WINDIR% |
C:\Windows |
Alias de %SYSTEMROOT%. Utilizado por aplicaciones antiguas. |
%PROGRAMFILES% |
C:\Program Files |
Carpeta de instalación predeterminada para programas de 64 bits. |
%PROGRAMFILES(X86)% |
C:\Program Files (x86) |
Carpeta de instalación predeterminada para programas de 32 bits en Windows de 64 bits. |
%COMPUTERNAME% |
DESKTOP-ABC123 |
Nombre NetBIOS del equipo. |
%OS% |
Windows_NT |
Siempre Windows_NT en Windows moderno. Se usa en scripts por lotes heredados para detectar el sistema operativo. |
%PROCESSOR_ARCHITECTURE% |
AMD64 |
Arquitectura de CPU del proceso actual (AMD64, x86, ARM64). |
%PATH% |
(lista combinada) | Lista de directorios separados por punto y coma que se recorren para buscar ejecutables. |
%PATHEXT% |
.COM;.EXE;.BAT;… |
Extensiones de archivo que Windows considera ejecutables al buscar en PATH. |
%PUBLIC% |
C:\Users\Public |
Carpeta pública compartida accesible por todos los usuarios del equipo. |
Puedes usar cualquiera de estas variables en la barra de direcciones del Explorador de archivos, en el cuadro de diálogo Ejecutar (Win+R), en scripts por lotes y en PowerShell, encerrándolas entre signos de porcentaje (%VARIABLE%) o con la sintaxis $env:VARIABLE.
Los cambios no tienen efecto en las aplicaciones abiertas. Los cambios en las variables de entorno solo se leen cuando se inicia un proceso. Debes cerrar y volver a abrir la aplicación, la terminal o el IDE. Cerrar y volver a iniciar sesión garantiza que todos los procesos reciban los valores actualizados.
Comando no encontrado después de añadirlo a PATH. Primero verifica que la ruta se añadió correctamente con echo %PATH% en una nueva ventana de CMD. Comprueba si hay errores tipográficos, barras invertidas que faltan o espacios de más. Asegúrate de haber editado el ámbito correcto (usuario frente a sistema).
PATH aparece truncado — faltan entradas. Esto se debe al límite de 1.024 caracteres del comando setx antiguo o de herramientas de registro heredadas. Usa el editor gráfico de PATH o el método [System.Environment] de PowerShell, que admite rutas de hasta 32.767 caracteres (el límite del registro de Windows).
Las variables del sistema no son visibles para el usuario actual. Asegúrate de revisar tanto la sección de usuario como la del sistema en el cuadro de diálogo de Variables de entorno, o usa set en CMD, que muestra el resultado combinado. Si una variable del sistema sigue sin aparecer, revisa la directiva de grupo — puede sobrescribir u ocultar variables.
Una aplicación ignora la variable de entorno. Algunas aplicaciones almacenan en caché las variables de entorno al iniciar y no las vuelven a leer mientras están en ejecución. Reinicia la aplicación. Algunas además requieren que la variable esté definida antes de que se inicie el servicio que las lanza; en ese caso, puede ser necesario reiniciar el sistema.
set > "%USERPROFILE%\Desktop\env_backup.txt" en CMD. Esto te proporciona una referencia para restaurar si algo falla.
PATH, cuyo valor se concatena a partir de ambos. Si eres el único usuario y tienes derechos de administrador, la diferencia práctica es mínima; en equipos compartidos o entornos controlados, las variables del sistema son la opción correcta para ajustes que afecten a toda la máquina.
Path en las variables de usuario, haz clic en Editar, luego en Nuevo y pega el directorio (p. ej., C:\Python312 y C:\Python312\Scripts para Python, o C:\Program Files\nodejs para Node.js). Abre una nueva ventana de CMD y escribe python --version o node --version para confirmar.
C:\Program Files\...). Al referenciar esa variable en CMD, encierra la expansión entre comillas: "%MI_RUTA%". Los nombres de variables deben ser alfanuméricos con guiones bajos; evita espacios y caracteres especiales en los nombres. No incluyas comillas literales dentro del valor de una variable mediante la interfaz gráfica, ya que se almacenarán tal cual y pueden provocar comportamientos inesperados cuando los scripts expandan la variable.
%PATH%, %path% y %Path% hacen referencia a la misma variable. Esto es diferente de Linux/macOS, donde PATH y path serían dos variables distintas. Por convención, los nombres de variables de entorno en Windows se escriben en MAYÚSCULAS, pero es puramente una cuestión de estilo.
MIAPP_API_KEY. Ten en cuenta que las variables de entorno se almacenan en texto plano en el registro de Windows — no están cifradas. Cualquier proceso que se ejecute bajo tu cuenta de usuario puede leerlas. Para mayor seguridad, considera el Administrador de credenciales de Windows, Azure Key Vault o herramientas como direnv combinadas con archivos .env excluidos del control de versiones. Nunca confirmes en repositorios de código fuente variables de entorno que contengan secretos.
REG_EXPAND_SZ (el tipo utilizado para variables de entorno expandibles como PATH). Sin embargo, el comando heredado setx trunca silenciosamente los valores de más de 1.024 caracteres — una limitación conocida. Para gestionar valores largos de forma segura (especialmente PATH), usa siempre el editor gráfico o [System.Environment]::SetEnvironmentVariable() en PowerShell, que se comunican directamente con el registro sin esta restricción.
Las variables de entorno son una parte fundamental de la configuración de Windows: dominarlas te hace significativamente más productivo como desarrollador, administrador de sistemas o usuario avanzado. Usa el editor gráfico para una gestión visual y segura del PATH; usa la API [System.Environment] de PowerShell para automatización con control de ámbito y sin límite de caracteres; y usa set/$env: para valores temporales de sesión que no contaminen el registro del sistema.
Tanto en Windows 10 como en Windows 11, los mecanismos subyacentes son idénticos — solo difiere la apariencia visual. Una vez que comprendas el ámbito de usuario frente al del sistema, el comportamiento de concatenación de PATH y cómo funciona la herencia de procesos, rara vez te encontrarás con problemas que no puedas diagnosticar y resolver en cuestión de minutos.