如何设置 Windows 环境变量
Windows 环境变量
在 Windows 系统中,系统环境变量对所有用户有效,而用户环境变量仅对用户自身有效。
Windows 环境变量保存在哪里?
Windows 中的环境变量保存在注册表中,其中系统环境变量对应的注册表键为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,用户环境变量对应的注册表键为HKEY_CURRENT_USER\Environment
。
设置 Windows 系统环境变量需要较高的权限
设置 Windows 系统环境变量需要较高的权限,这可能会要求你提供相关账户的验证信息。
使用界面设置 Windows 环境变量
对于 Windows 10/11,可以在搜索框中输入环境变量
,然后从结果中选择对应的条目,以在弹出的环境变量窗口中编辑系统环境变量或用户环境变量。如果弹出的是系统属性窗口,则需要继续点击环境变量按钮。
对于较老的 Windows 版本,可以尝试通过控制面板:系统 | 高级系统设置打开系统属性窗口。
通过环境变量窗口编辑的 Windows 环境变量可能无法对命令行应用立即产生影响
当你通过环境变量窗口编辑 Windows 环境变量后,这些环境变量的改变可能不会被正在运行的命令行应用识别(比如,命令提示符),对于这种情况,可尝试重新启动命令行应用。
使用命令提示符设置 Windows 环境变量
命令提示符的setx
命令同样可以设置 Windows 环境变量,其格式如下。
setx <variable> <value> [/m]
- variable 参数
variable
参数为环境变量的名称。- value 参数
value
参数为环境变量的值,该参数可通过成对的%
返回其他环境变量的值,比如,书写%PATH%
将返回环境变量PATH
的值(当环境变量PATH
不存在时,将返回%PATH%
本身)。如果希望引用环境变量,而不是直接返回其值,可使用^
对%
进行转义,比如,^%PATH^%
是对环境变量PATH
的引用。当参数
value
对应的值包含空白时,需要使用"
括住,比如,"Hello World"
。这条规则也适用于%
返回的值,当环境变量PATH
含有空白时,需要使用"
将其括住,"%PATH%"
。value
参数的值最多可包含 1024 个字符,超出此范围的部分将被裁剪。如果你没有提供value
参数,那么setx
命令将显示相关环境变量的信息。- /m 选项
/m
选项表示设置系统环境变量,要启用该选项,应确保使用管理员身份运行命令提示符,或使用/u
和/p
选项提供管理员账户凭证。
使用命令 setx 设置 Windows 环境变量后需要重启命令提示字元
在使用命令setx
设置环境变量后,需要重启命令提示符才能识别发生的改动。
Windows 命令提示符中的 %PATH% 是一个组合值
某些环境变量可能会被系统,命令提示符或一些程序修改。比如,命令提示符中的%PATH%
是系统环境变量PATH
与用户环境变量PATH
的组合,使用setx PATH "%PATH%;.\bin\"
可能会写入重复的内容。
转义特殊字符
想要获取更多关于命令行转义的内容,你可以查看如何在命令行中转义特殊字符一节。
下面的命令将用户环境变量LS
设置为learnscript.net
。
setx LS learnscript.net
下面的命令将用户环境变量LSPATH
,设置为LS
表示的值learnscript.net
与一段网址的组合,LSPATH
的值将是learnscript.net/welcome/play/
。如果之后修改LS
,那么对LSPATH
不会有任何影响。
setx LSPATH %LS%/welcome/play/
尝试使用^%
在LSPATH
中引用环境变量LS
,当LS
的值发生变化时,LSPATH
也将改变。
setx LSPATH ^%LS^%/welcome/play/
设置用户环境变量LSTITLE
,将^%
排除在"
之外,并使用成对的"
包含了多个含有空格的内容。
setx LSTITLE "Is "^%LS^%" not bad?"
尝试使用"
括住含有空格的内容,如果环境变量MYNAME
不存在,那么LSTITLE
的值将是Welcome %MYNAME% to learnscript.net
。
setx LSTITLE "Welcome %MYNAME% to %LS%"
使用 PowerShell 设置 Windows 环境变量
使用方法GetEnvironmentVariable
或SetEnvironmentVariable
,你可以在 PowerShell 中获取或设置环境变量,其格式如下。
GetEnvironmentVariable(variable, target)
SetEnvironmentVariable(variable, value, target)
- variable 参数
variable
参数为环境变量的名称。- value 参数
value
参数为环境变量的值,可以使用%
表示对其他环境变量的引用,比如,%OS%
,他的效果类似于setx
命令中的^%OS^%
。- target 参数
target
参数为环境变量的位置,为该参数传递字符串'Machine'
,将获取或设置系统环境变量,传递'User'
则获取或设置用户环境变量。
下面的命令使用SetEnvironmentVariable
方法设置了用户环境变量LS
。
[Environment]::SetEnvironmentVariable('LS', 'learnscript.net', 'User')
下面的命令使用%LS%
引用环境变量LS
,LSPATH
的值会在LS
被修改后发生变化。
[Environment]::SetEnvironmentVariable('LSPATH', '%LS%/welcome/play/', 'User')
下面的命令使用GetEnvironmentVariable
获取用户环境变量LS
的值,并将其写入到用户环境变量LSTITLE
中。
[Environment]::SetEnvironmentVariable('LSTITLE', [Environment]::GetEnvironmentVariable("LS", "User") + ' is here', 'User')