Como exportar e importar variáveis ​​de ambiente no windows?

93

Descobri que é difícil manter minhas variáveis ​​de ambiente sincronizadas em máquinas diferentes. Eu só quero exportar as configurações de um computador e importar para outros.

Acho que deveria ser possível, mas não sei como fazer. Alguém pode me ajudar? Obrigado.

max_y
fonte

Respostas:

119

Você pode usar o RegEdit para exportar as duas seguintes chaves:

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

HKEY_CURRENT_USER\Environment

O primeiro conjunto são variáveis ​​de sistema / ambiente global; o segundo conjunto são variáveis ​​de nível de usuário. Edite conforme necessário e importe os arquivos .reg para a nova máquina.

jdigital
fonte
2
execute o programa regedit, destaque as chaves em questão e use a opção "arquivo -> exportar" para salvá-lo como um arquivo
Silvertiger
a importação é feita simplesmente com um clique duplo no arquivo .reg com permissões de administrador.
thanos.a
NOTA: Isso não obtém todas as Variáveis ​​de Ambiente (EV)! Acabei de fazer um caminho de conjunto de comandos e baguncei todo o meu EV. Fui a este registro e apenas o EV original estava lá. Fiz uma restauração do sistema e recuperei todos os meus EV perdidos na var PATH. Este registro contém apenas alguns EV necessários, mas não qualquer EV do seu programa nem quaisquer caminhos que você definir manualmente. CUIDADO! Em uma linha de comando: echo path> mybackup.txt ou set> mybackup.txt para todo o backup em TODOS os vars / caminhos e TODOS os sys vars / caminhos.
ejbytes de
@ejbytes Isso copia suas variáveis ​​globais que você definiu, mas provavelmente é melhor exportá-las com a CLI em vez de por meio do registro.
Alexander
87

Eu usaria o comando SET do prompt de comando para exportar todas as variáveis, em vez de apenas PATH, conforme recomendado acima.

C:\> SET >> allvariables.txt

Para importar as variáveis, pode-se usar um loop simples:

C:\> for /F %A in (allvariables.txt) do SET %A
Kushal Paudyal
fonte
11
Como você importa de volta todo o Env exportado. Vars. de allvariables.txt
Ash,
Muito agradável. Acabei de perder todos os meus vars de caminho fazendo um conjunto de caminhos incorreto e tive que fazer uma restauração do sistema. Felizmente, tive uma atualização recente a partir de hoje mais cedo. Acabei de fazer um backup com este comando. Agradável. Essa solução de registro contém apenas os vars originais, mas nada que "você" (como um programador diz para novas compilações) tenha criado ou qualquer nova instalação criada.
ejbytes de
1
No Windows 7 de 64 bits, se houver duas variáveis ​​com nomes idênticos no nível do usuário e no nível do sistema, este comando dá precedência à variável do nível do usuário e omite o nível do sistema um. Esse comportamento faz sentido, mas percebi que pode valer a pena mencioná-lo, caso alguém esteja esperando o conjunto completo de cada tipo de variável.
GoldDragonTSU
1
este comando funcionou:set > "C:\Users\xx\Desktop\envir variable.txt"
JinSnow
1
Para responder Ash, você pode usar um loop for simples no prompt do cmd para importar de volta todas as variáveis:for /F %A in (allvariables.txt) do SET %A
Gabriel
17

Para exportar variáveis ​​de usuário, abra um prompt de comando e use regedit com / e

Exemplo:

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

Combine as respostas de @vincsilver e @jdigital com algumas modificações,

  1. exportar .regpara o diretório atual
  2. adicionar marca de data

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"

A saída gostaria de:

global_env_variables[2017-02-14].reg
user_env_variables[2017-02-14].reg
Mithril
fonte
3
a variável TODAY depende de % DATE%, que depende de como as preferências de localidade do Windows. O comando acima não funciona para a Índia. Isso funciona -> definir HOJE =% DATA: ~ 4,2% -% DATA: ~ 7,2% -% DATA: ~ 10,4%
Rakesh N
5

Você pode obter acesso às variáveis ​​de ambiente na linha de comando ou no registro.

Linha de comando

Se você quiser uma variável de ambiente específica, basta digitar o nome dela (por exemplo PATH), seguido por a >, e o nome do arquivo para escrever. O seguinte irá despejar a variável de ambiente PATH em um arquivo chamado path.txt.

C:\> PATH > path.txt

Método de Registro

O Registro do Windows contém todas as variáveis ​​de ambiente, em lugares diferentes, dependendo de qual conjunto você está procurando. Você pode usar os comandos Importar / Exportar do registro para transferi-los para o outro PC.

Para variáveis ​​do sistema:

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

Para variáveis ​​do usuário:

HKEY_CURRENT_USER\Environment
Gavin Bunney
fonte
1
Na minha máquina, PATH> (ou PATH >>) retornou um arquivo de texto vazio, enquanto SET >> funcionou. Windows 7 x64 bits.
PatrickT
Funcionou para mim no Win7x64. Não tenho certeza de quais são os requisitos.
Kissaki
De qual pasta você executa este comando? O meu disse não conseguiu encontrar o caminho.
Azurespot
2

Meu método favorito para fazer isso é escrevê-lo como um script em lote para combinar variáveis ​​de usuário e variáveis ​​de sistema em um único arquivo de backup, como criar um environment-backup.batarquivo e colocá-lo nele:

@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"

Isso cria o environment-backup.regque você pode usar para reimportar variáveis ​​de ambiente existentes. Isso adicionará e substituirá novas variáveis, mas não excluirá as existentes :)

chunk_split
fonte
2

Aqui está meu método PowerShell

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

O que faz

  1. Coleta todas as variáveis ​​de ambiente
  2. Filtra-os
  3. Emite o PowerShell formatado necessário para recriá-los em outra máquina (assume que todos estão definidos no nível da máquina)

Então, depois de executar isso na máquina de origem, simplesmente transfira a saída para a máquina de destino e execute (prompt elevado se estiver definido no nível da máquina)

decreto
fonte