Как экспортировать и импортировать переменные среды в Windows?

98

Я обнаружил, что мне трудно синхронизировать переменные среды на разных машинах. Я просто хочу экспортировать настройки с одного компьютера и импортировать на другие.

Думаю, это должно быть возможно, но не знаю, как это сделать. Может кто-нибудь мне помочь? Спасибо.

max_y
источник

Ответы:

123

Вы можете использовать RegEdit для экспорта следующих двух ключей:

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

HKEY_CURRENT_USER\Environment

Первый набор - это системные / глобальные переменные среды; второй набор - переменные уровня пользователя. При необходимости отредактируйте, а затем импортируйте файлы .reg на новый компьютер.

jdigital
источник
2
запустите программу regedit, выделите нужные ключи и затем используйте опцию «файл -> экспорт», чтобы сохранить его как файл
Silvertiger
импорт выполняется двойным щелчком по файлу .reg при наличии прав администратора.
thanos.a
ПРИМЕЧАНИЕ: это не все переменные среды (EV)! Я просто выполнил набор команд и испортил весь свой электромобиль. Я зашел в этот реестр, и там был только оригинальный электромобиль. Я восстановил систему и вернул все мои недостающие EV в PATH var. Этот реестр содержит только несколько необходимых EV, но не EV вашей программы или пути, которые вы задали вручную. ОСТОРОЖНО! В командной строке: echo path> mybackup.txt или set> mybackup.txt для всей резервной копии для ВСЕХ переменных / путей и ВСЕХ системных переменных / путей.
ejbytes 06
@ejbytes Это копирует ваши глобальные переменные, которые вы установили, но, вероятно, лучше экспортировать их с помощью CLI, а не через реестр.
Александр
92

Я бы использовал команду SET из командной строки для экспорта всех переменных, а не только PATH, как рекомендовано выше.

C:\> SET >> allvariables.txt

Чтобы импортировать переменные, можно использовать простой цикл:

C:\> for /F %A in (allvariables.txt) do SET %A
Кушал Паудьял
источник
11
Как импортировать обратно все экспортированные Env. Варс. из allvariables.txt
Эш
Очень хорошо. Я просто потерял все свои переменные пути из-за неправильного набора путей, и мне пришлось выполнить восстановление системы. К счастью, на сегодняшний день у меня было последнее обновление. Я только что сделал резервную копию с помощью этой команды. Ницца. Это решение для реестра хранит только оригинальные переменные, но ничего, что было создано «вами» (как программист для новых сборок) или создало любую новую установку.
ejbytes 06
1
В 64-разрядной версии Windows 7, если есть две переменные с одинаковыми именами на уровне пользователя и уровне системы, эта команда дает приоритет переменной уровня пользователя и пропускает первый уровень системы. Такое поведение имеет смысл, но решил, что стоит упомянуть, если кто-то ожидал полного набора от каждого типа переменных.
GoldDragonTSU
1
эта команда действительно сработала:set > "C:\Users\xx\Desktop\envir variable.txt"
JinSnow
1
Чтобы ответить Эшу, вы можете использовать простой цикл for в приглашении cmd, чтобы импортировать обратно все переменные:for /F %A in (allvariables.txt) do SET %A
Габриэль
18

Чтобы экспортировать пользовательские переменные, откройте командную строку и используйте regedit с / e

Пример :

regedit /e "%userprofile%\Desktop\my_user_env_variables.reg" "HKEY_CURRENT_USER\Environment"
vincsilver
источник
14

Объедините ответы @vincsilver и @jdigital с некоторыми изменениями,

  1. экспорт .regв текущий каталог
  2. добавить отметку даты

код:

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"

Вывод хотел бы:

global_env_variables[2017-02-14].reg
user_env_variables[2017-02-14].reg
Мифрил
источник
4
СЕГОДНЯ переменная зависит от % DATE% , который зависит от того, как Windows , Locale предпочтений. Вышеупомянутая команда не работает для Индии. Это работает -> установите СЕГОДНЯ =% ДАТА: ~ 4,2% -% ДАТА: ~ 7,2% -% ДАТА: ~ 10,4%
Ракеш Н.
5

Вы можете получить доступ к переменным среды в командной строке или в реестре.

Командная строка

Если вам нужна конкретная переменная среды, просто введите ее имя (например PATH), за которым следует a >, и имя файла для записи. Следующее будет сбрасывать переменную среды PATH в файл с именем path.txt.

C:\> PATH > path.txt

Метод реестра

Реестр Windows хранит все переменные среды в разных местах в зависимости от того, какой набор вам нужен. Вы можете использовать команды импорта / экспорта реестра, чтобы перенести их на другой компьютер.

Для системных переменных:

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

Для пользовательских переменных:

HKEY_CURRENT_USER\Environment
Гэвин Банни
источник
1
На моей машине PATH> (или PATH >>) вернул пустой текстовый файл, а SET >> работал. 64-разрядная версия Windows 7.
PatrickT
У меня работал на Win7x64. Не уверен, каковы требования.
Киссаки
Из какой папки вы выполняете эту команду? Мой сказал, что не нашел пути.
Azurespot
2

Мой любимый способ сделать это - записать его как пакетный сценарий, чтобы объединить как пользовательские, так и системные переменные в один файл резервной копии, например, создать environment-backup.batфайл и поместить в него:

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

Это создает, environment-backup.regчто вы можете использовать для повторного импорта существующих переменных среды. Это добавит и переопределит новые переменные, но не удалит существующие :)

chunk_split
источник
2

Вот мой метод PowerShell

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

Что оно делает

  1. Подбирает все переменные среды
  2. Фильтрует их
  3. Испускает отформатированную оболочку PowerShell, необходимую для их воссоздания на другом компьютере (предполагается, что все они установлены на уровне компьютера)

Поэтому после запуска этого на исходном компьютере просто перенесите вывод на целевой компьютер и выполните (повышенное приглашение, если настройка на уровне компьютера)

фиат
источник
0

Скрипт PowerShell на основе ответа @Mithrl

# export_env.ps1
$Date = Get-Date
$DateStr = '{0:dd-MM-yyyy}' -f $Date

mkdir -Force $PWD\env_exports | Out-Null

regedit /e "$PWD\env_exports\user_env_variables[$DateStr].reg" "HKEY_CURRENT_USER\Environment"
regedit /e "$PWD\env_exports\global_env_variables[$DateStr].reg" "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Фани Ритвидж
источник