Jak eksportować i importować zmienne środowiskowe w systemie Windows?

97

Zauważyłem, że trudno jest synchronizować moje zmienne środowiskowe na różnych komputerach. Chcę tylko wyeksportować ustawienia z jednego komputera i zaimportować do innych.

Myślę, że powinno to być możliwe, ale nie wiem, jak to zrobić. Czy ktoś może mi pomóc? Dzięki.

max_y
źródło

Odpowiedzi:

123

Możesz użyć RegEdit, aby wyeksportować następujące dwa klucze:

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

HKEY_CURRENT_USER\Environment

Pierwszy zestaw to systemowe / globalne zmienne środowiskowe; drugi zestaw to zmienne na poziomie użytkownika. Edytuj zgodnie z potrzebami, a następnie zaimportuj pliki .reg na nowy komputer.

jdigital
źródło
2
uruchom program regedit, zaznacz odpowiednie klucze, a następnie użyj opcji "plik -> eksport", więc zapisz go jako plik
Silvertiger
import odbywa się poprzez dwukrotne kliknięcie pliku .reg, mając jednocześnie uprawnienia administratora.
thanos
UWAGA: To nie obejmuje wszystkich zmiennych środowiskowych (EV)! Właśnie wykonałem polecenie ustawiania ścieżki i zepsułem wszystkie moje EV. Poszedłem do tego rejestru i były tam tylko oryginalne EV. Wykonałem przywracanie systemu i odzyskałem wszystkie brakujące EV z powrotem do PATH var. Ten rejestr zawiera tylko kilka niezbędnych EV, ale nie zawiera żadnego EV twojego programu ani żadnych ścieżek ustawionych ręcznie. STRZEC SIĘ! W wierszu poleceń: echo path> mybackup.txt lub set> mybackup.txt dla całej kopii zapasowej na WSZYSTKICH zmiennych / ścieżkach i WSZYSTKICH zmiennych / ścieżkach sys.
ejbytes
@ejbytes To kopiuje twoje globalne zmienne, które ustawiłeś, ale prawdopodobnie lepiej jest wyeksportować je za pomocą CLI niż przez rejestr.
Alexander
91

Użyłbym polecenia SET z wiersza polecenia, aby wyeksportować wszystkie zmienne, a nie tylko PATH, jak zalecono powyżej.

C:\> SET >> allvariables.txt

Aby zaimportować zmienne, można użyć prostej pętli:

C:\> for /F %A in (allvariables.txt) do SET %A
Kushal Paudyal
źródło
11
Jak zaimportować z powrotem wszystkie wyeksportowane pliki Env. Vars. from allvariables.txt
Ash,
Bardzo dobrze. Właśnie straciłem wszystkie zmienne ścieżki, wykonując zły zestaw ścieżek i musiałem wykonać przywracanie systemu. Na szczęście wcześniej miałem ostatnią aktualizację na dzień dzisiejszy. Właśnie wykonałem kopię zapasową za pomocą tego polecenia. Ładny. To rozwiązanie rejestru przechowuje tylko oryginalne zmienne, ale nic, co „Ty” (jak mówi programista w przypadku nowych kompilacji) utworzyłeś ani żadna nowa instalacja nie została utworzona.
ejbytes
1
W 64-bitowym systemie Windows 7, jeśli istnieją dwie identycznie nazwane zmienne na poziomie użytkownika i na poziomie systemu, to polecenie daje pierwszeństwo zmiennej na poziomie użytkownika i pomija pierwszy poziom systemu. To zachowanie ma sens, ale doszedłem do wniosku, że warto o nim wspomnieć na wypadek, gdyby ktoś oczekiwał pełnego zestawu z każdego typu zmiennej.
GoldDragonTSU
1
to polecenie zadziałało:set > "C:\Users\xx\Desktop\envir variable.txt"
JinSnow
1
Aby odpowiedzieć Ashowi, możesz użyć prostej pętli for w zachęcie cmd, aby zaimportować z powrotem wszystkie zmienne:for /F %A in (allvariables.txt) do SET %A
Gabriel
18

Aby wyeksportować zmienne użytkownika, otwórz wiersz polecenia i użyj polecenia regedit z / e

Przykład:

regedit /e "%userprofile%\Desktop\my_user_env_variables.reg" "HKEY_CURRENT_USER\Environment"
vincsilver
źródło
14

Połącz odpowiedzi @vincsilver i @jdigital z pewnymi modyfikacjami,

  1. eksport .regdo bieżącego katalogu
  2. dodaj znacznik daty

kod:

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"

Wyjście chciałoby:

global_env_variables[2017-02-14].reg
user_env_variables[2017-02-14].reg
Mithril
źródło
4
DZIŚ zmienna zależy % date% , który jest zależny od preferencji Okna lokalizacji. Powyższe polecenie nie działa w Indiach. To działa -> set TODAY =% DATE: ~ 4,2% -% DATE: ~ 7,2% -% DATE: ~ 10,4%
Rakesh N
5

Dostęp do zmiennych środowiskowych można uzyskać w wierszu poleceń lub w rejestrze.

Wiersz poleceń

Jeśli chcesz mieć określoną zmienną środowiskową, po prostu wpisz jej nazwę (np. PATH), A następnie a >i nazwę pliku do zapisu. Poniższe polecenie zrzuci zmienną środowiskową PATH do pliku o nazwie path.txt.

C:\> PATH > path.txt

Metoda rejestracji

Rejestr systemu Windows przechowuje wszystkie zmienne środowiskowe w różnych miejscach, w zależności od wybranego zestawu. Możesz użyć poleceń importu / eksportu rejestru, aby przenieść je na inny komputer.

W przypadku zmiennych systemowych:

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

W przypadku zmiennych użytkownika:

HKEY_CURRENT_USER\Environment
Gavin Bunney
źródło
1
Na moim komputerze PATH> (lub PATH >>) zwróciło pusty plik tekstowy, podczas gdy SET >> działał. Windows 7 x64 bity.
PatrickT,
Pracował dla mnie na Win7x64. Nie wiem, jakie są wymagania.
Kissaki
Z którego folderu wykonujesz to polecenie? Mój powiedział, że nie może znaleźć ścieżki.
Azurespot
2

Moją ulubioną metodą jest zapisanie go jako skryptu wsadowego, który łączy zarówno zmienne użytkownika, jak i zmienne systemowe w jeden plik kopii zapasowej, tak jak pokazano na rysunku, utworzenie environment-backup.batpliku i umieszczenie w nim:

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

Tworzy to, environment-backup.regktórego można użyć do ponownego zaimportowania istniejących zmiennych środowiskowych. Spowoduje to dodanie i zastąpienie nowych zmiennych, ale nie usunie istniejących :)

chunk_split
źródło
2

Oto moja metoda PowerShell

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

Co to robi

  1. Zbiera wszystkie zmienne środowiskowe
  2. Filtruje je
  3. Emituje sformatowany program PowerShell potrzebny do ponownego utworzenia ich na innym komputerze (zakłada, że ​​wszystkie są ustawione na poziomie komputera)

Więc po uruchomieniu tego na maszynie źródłowej, po prostu przenieś dane wyjściowe na maszynę docelową i wykonaj (podwyższony monit, jeśli ustawisz na poziomie maszyny)

placet
źródło
0

PowerShell skrypt na podstawie @ Mithrl za odpowiedź

# 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"
Phani Rithvij
źródło