我发现很难让环境变量在不同的机器上保持同步。我只想从一台计算机导出设置,然后导入到另一台计算机。
我认为应该有可能,但不知道该怎么做。谁能帮我?谢谢。
Answers:
您可以使用RegEdit导出以下两个键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Environment
第一组是系统/全局环境变量;第二组是用户级变量。根据需要进行编辑,然后将.reg文件导入新计算机。
我将使用命令提示符下的SET命令来导出所有变量,而不仅仅是上面建议的PATH。
C:\> SET >> allvariables.txt
要导入变量,可以使用一个简单的循环:
C:\> for /F %A in (allvariables.txt) do SET %A
set > "C:\Users\xx\Desktop\envir variable.txt"
for /F %A in (allvariables.txt) do SET %A
结合@vincsilver和@jdigital的答案进行一些修改,
.reg
到当前目录码:
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
您可以在命令行或注册表中访问环境变量。
命令行
如果您想要一个特定的环境变量,则只需键入它的名称(例如PATH
),后跟一个>
,以及要写入的文件名。以下内容将PATH环境变量转储到名为path.txt的文件中。
C:\> PATH > path.txt
注册表方法
Windows注册表将所有环境变量保存在不同的位置,具体取决于要使用的设置。您可以使用注册表的“导入/导出”命令将它们移至另一台PC。
对于系统变量:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
对于用户变量:
HKEY_CURRENT_USER\Environment
我最喜欢的方法是将其作为批处理脚本写出,以将用户变量和系统变量合并到一个备份文件中,如下所示,创建一个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
可用于重新导入现有环境变量的文件。这将添加并覆盖新变量,但不会删除现有变量:)
这是我的PowerShell方法
gci env:* | sort-object name | Where-Object {$_.Name -like "MyApp*"} | Foreach {"[System.Environment]::SetEnvironmentVariable('$($_.Name)', '$($_.Value)', 'Machine')"}
它能做什么
因此,在源计算机上运行此命令后,只需将输出传输到目标计算机上并执行(如果在计算机级别进行设置,则提示升高)