【笔记】Windows上配置环境变量

前言

Windows上配置环境变量本质是修改注册表
所有系统级环境变量的操作都需要管理员及以上权限

GUI方式配置环境变量

  • 打开环境变量窗口
    • 控制面板\所有控制面板项\系统->高级系统设置->环境变量
    • 右键此电脑->属性->高级系统设置->环境变量
    • 右键开始菜单->设置->系统->系统信息->高级系统设置->环境变量

  • 上半部分修改用户级环境变量,下半部分修改系统级环境变量

通过echo获取环境变量

查询指定环境变量

  • echo无法区分环境变量是进程级、用户级还是系统级,因为echo是从当前会话中查询指定环境变量
1
echo %key%

通过set命令配置环境变量

  • 这种方式只能在CMD中使用,因为set是CMD内置命令不是可执行程序

进程级

新增、修改进程级环境变量

1
set key=value

删除进程级环境变量

1
set key=

查询所有环境变量

  • 包含进程级、用户级、系统级
1
set

通过setx可执行程序配置环境变量

  • 这种方式可以在CMD或PowerShell中使用,因为setx是可执行程序
  • setx不能删除环境变量,只能将环境变量值置为空

用户级

新增、修改用户级环境变量

1
setx key value

将用户级环境变量值置为空

1
setx key ""

系统级

新增、修改系统级环境变量

1
setx key value /M

将用户级环境变量值置为空

1
setx key "" /M

通过 Env: 驱动器的方式配置环境变量

  • 这种方式只能在PowerShell中使用

进程级

新增进程级环境变量

1
New-Item -Path Env:\key -Value "value"
1
New-Item Env:\key -Value "value"
  • 内置别名
1
ni Env:\key -Value "value"

新增、修改进程级环境变量

1
Set-Item -Path Env:\key "value"
1
Set-Item Env:\key "value"
  • 内置别名
1
set Env:\key "value"
  • 语法糖
1
$env:key = "value"

删除进程级环境变量

1
Remove-Item -Path Env:\key
1
Remove-Item Env:\key
  • 内置别名
1
ri Env:\key
  • 语法糖
1
$env:key = $null
强制删除
1
Remove-Item Env:\key -Force

查询指定进程级环境变量

1
Get-Item -Path Env:\key
1
Get-Item Env:\key
  • 内置别名
1
gi Env:\key
只获取值
1
(Get-Item Env:\key).Value
  • 语法糖
1
$env:key

查询所有进程级环境变量

1
Get-ChildItem -Path Env:
1
Get-ChildItem Env:
  • 内置别名
1
gci Env:
1
dir Env:
1
ls Env:

通过 .NET API 的方式配置环境变量

  • 这种方式只能在PowerShell中使用

进程级

新增、修改进程级环境变量

1
[System.Environment]::SetEnvironmentVariable("key", "value", "Process")
  • 简写
1
[Environment]::SetEnvironmentVariable("key", "value", "Process")

删除进程级环境变量

1
[System.Environment]::SetEnvironmentVariable("key", $null, "Process")
  • 简写
1
[Environment]::SetEnvironmentVariable("key", $null, "Process")

查询指定进程级环境变量

1
[System.Environment]::GetEnvironmentVariable("key", "Process")
  • 简写
1
[Environment]::GetEnvironmentVariable("key", "Process")

用户级

新增、修改用户级环境变量

1
[System.Environment]::SetEnvironmentVariable("key", "value", "User")
  • 简写
1
[Environment]::SetEnvironmentVariable("key", "value", "User")

删除用户级环境变量

1
[System.Environment]::SetEnvironmentVariable("key", $null, "User")
  • 简写
1
[Environment]::SetEnvironmentVariable("key", $null, "User")

查询指定用户级环境变量

1
[System.Environment]::GetEnvironmentVariable("key", "User")
  • 简写
1
[Environment]::GetEnvironmentVariable("key", "User")

系统级

新增、修改系统级环境变量

1
[System.Environment]::SetEnvironmentVariable("key", "value", "Machine")
  • 简写
1
[Environment]::SetEnvironmentVariable("key", "value", "Machine")

删除系统级环境变量

1
[System.Environment]::SetEnvironmentVariable("key", $null, "Machine")
  • 简写
1
[Environment]::SetEnvironmentVariable("key", $null, "Machine")

查询指定系统级环境变量

1
[System.Environment]::GetEnvironmentVariable("key", "Machine")
  • 简写
1
[Environment]::GetEnvironmentVariable("key", "Machine")

通过注册表配置环境变量

  • 这种方式可以在CMD或PowerShell中使用

用户级

新增、修改用户级环境变量

1
reg add "HKCU\Environment" /v key /t REG_SZ /d "value" /f

删除用户级环境变量

1
reg delete "HKCU\Environment" /v key /f

查询指定用户级环境变量

1
reg query "HKCU\Environment" /v key

查询所有用户级环境变量

1
reg query "HKCU\Environment"

系统级

新增、修改系统级环境变量

1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v key /t REG_SZ /d "value" /f

删除系统级环境变量

1
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v key /f

查询指定系统级环境变量

1
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v key

查询所有系统级环境变量

1
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

完成

参考文献

知乎——Fu Kai