¿Cómo exportar e importar variables de entorno en Windows?

95

Descubrí que es difícil mantener sincronizadas mis variables de entorno en diferentes máquinas. Solo quiero exportar la configuración de una computadora e importarla a otras.

Creo que debería ser posible, pero no sé cómo hacerlo. ¿Alguien puede ayudarme? Gracias.

max_y
fuente

Respuestas:

121

Puede utilizar RegEdit para exportar las siguientes dos claves:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

HKEY_CURRENT_USER\Environment

El primer conjunto son variables de entorno global / sistema; el segundo conjunto son variables a nivel de usuario. Edite según sea necesario y luego importe los archivos .reg en la nueva máquina.

jdigital
fuente
2
ejecute el programa regedit, resalte las claves en cuestión y luego use la opción "archivo -> exportar" así que guárdelo como un archivo
Silvertiger
la importación se realiza simplemente haciendo doble clic en el archivo .reg mientras se tienen permisos de administrador.
thanos.a
NOTA: ¡Esto no obtiene todas las variables de entorno (EV)! Acabo de establecer una ruta de comando y arruiné todo mi EV. Fui a este registro y solo el EV original estaba allí. Hice una restauración del sistema y devolví todo mi EV faltante a la PATH var. Este registro solo contiene algunos EV necesarios, pero no ninguno de los EV de su programa ni ninguna ruta que establezca manualmente. ¡TENER CUIDADO! En una línea de comando: echo path> mybackup.txt o set> mybackup.txt para la copia de seguridad completa en TODAS las vars / rutas y TODAS las vars / rutas del sistema.
ejbytes
@ejbytes Esto copia las variables globales que configuró, pero probablemente sea mejor exportarlas con la CLI en lugar de hacerlo a través del registro.
Alexander
88

Usaría el comando SET desde el símbolo del sistema para exportar todas las variables, en lugar de solo PATH como se recomienda anteriormente.

C:\> SET >> allvariables.txt

Para importar las variables, se puede usar un bucle simple:

C:\> for /F %A in (allvariables.txt) do SET %A
Kushal Paudyal
fuente
11
¿Cómo se vuelven a importar todos los archivos Env. Vars. from allvariables.txt
Ash
Muy agradable. Acabo de perder todas mis vars de ruta haciendo una ruta incorrecta y tuve que restaurar el sistema. Afortunadamente, tuve una actualización reciente a partir de hoy. Acabo de hacer una copia de seguridad con este comando. Agradable. Esa solución de registro solo contiene las vars originales, pero nada que "usted" (como dice un programador para las nuevas compilaciones) haya creado o cualquier nueva instalación creada.
ejbytes
1
En Windows 7 de 64 bits, si hay dos variables con el mismo nombre en el nivel de usuario y el nivel del sistema, este comando da prioridad a la variable de nivel de usuario y omite el nivel de sistema uno. Este comportamiento tiene sentido, pero pensé que valdría la pena mencionarlo en caso de que alguien esperara el conjunto completo de cada tipo de variable.
GoldDragonTSU
1
este comando funcionó:set > "C:\Users\xx\Desktop\envir variable.txt"
JinSnow
1
Para responder a Ash, puede usar un bucle for simple en el indicador de cmd para volver a importar todas las variables:for /F %A in (allvariables.txt) do SET %A
Gabriel
17

Para exportar variables de usuario, abra un símbolo del sistema y use regedit con / e

Ejemplo:

regedit /e "%userprofile%\Desktop\my_user_env_variables.reg" "HKEY_CURRENT_USER\Environment"
vincsilver
fuente
13

Combine las respuestas de @vincsilver y @jdigital con algunas modificaciones,

  1. exportar .regal directorio actual
  2. agregar marca de fecha

código:

set TODAY=%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%

regedit /e "%CD%\user_env_variables[%TODAY%].reg" "HKEY_CURRENT_USER\Environment"
regedit /e "%CD%\global_env_variables[%TODAY%].reg" "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

La salida quisiera:

global_env_variables[2017-02-14].reg
user_env_variables[2017-02-14].reg
Mithril
fuente
3
la variable TODAY depende de % DATE%, que depende de las preferencias de configuración regional de Windows. El comando anterior no funciona para India. Esto funciona -> establecer HOY =% FECHA: ~ 4,2% -% FECHA: ~ 7,2% -% FECHA: ~ 10,4%
Rakesh N
5

Puede obtener acceso a las variables de entorno en la línea de comandos o en el registro.

Línea de comando

Si desea una variable de entorno específica, simplemente escriba el nombre de la misma (por ejemplo PATH), seguido de a >, y el nombre del archivo para escribir. Lo siguiente volcará la variable de entorno PATH a un archivo llamado path.txt.

C:\> PATH > path.txt

Método de registro

El Registro de Windows contiene todas las variables de entorno, en diferentes lugares, según el conjunto que esté buscando. Puede utilizar los comandos de importación / exportación del registro para cambiarlos a la otra PC.

Para variables de sistema:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Para variables de usuario:

HKEY_CURRENT_USER\Environment
Gavin Bunney
fuente
1
En mi máquina, PATH> (o PATH >>) devolvió un archivo de texto vacío, mientras SET >> funcionaba. Windows 7 x64 bits.
PatrickT
Trabajó para mí en Win7x64. No estoy seguro de cuáles son los requisitos.
Kissaki
¿Desde qué carpeta ejecuta este comando? El mío dijo que no podía encontrar el camino.
Azurespot
2

Mi método favorito para hacer esto es escribirlo como un script por lotes para combinar las variables del usuario y las variables del sistema en un solo archivo de respaldo, crear un environment-backup.batarchivo y ponerlo en él:

@echo off
:: RegEdit can only export into a single file at a time, so create two temporary files.
regedit /e "%CD%\environment-backup1.reg" "HKEY_CURRENT_USER\Environment"
regedit /e "%CD%\environment-backup2.reg" "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

:: Concatenate into a single file and remove temporary files.
type "%CD%\environment-backup1.reg" "%CD%\environment-backup2.reg" > environment-backup.reg
del "%CD%\environment-backup1.reg"
del "%CD%\environment-backup2.reg"

Esto crea environment-backup.regque puede utilizar para volver a importar variables de entorno existentes. Esto agregará y anulará nuevas variables, pero no eliminará las existentes :)

chunk_split
fuente
2

Aquí está mi método PowerShell

gci env:* | sort-object name | Where-Object {$_.Name -like "MyApp*"} | Foreach {"[System.Environment]::SetEnvironmentVariable('$($_.Name)', '$($_.Value)', 'Machine')"}

Que hace

  1. Recoge todas las variables de entorno
  2. Los filtra
  3. Emite el PowerShell formateado necesario para recrearlos en otra máquina (se supone que todos están configurados a nivel de máquina)

Entonces, después de ejecutar esto en la máquina de origen, simplemente transfiera la salida a la máquina de destino y ejecute (indicador elevado si se configura a nivel de máquina)

fíat
fuente