关于环境变量,有两个痛点

  1. 系统环境变量总在用户环境变量前面,如果系统安装了一个过低或过高版本的 cmake,而你很难把另一个版本的 cmake 排在前面
  2. 如果没有管理员权限,就无法打开环境变量调整对话框,不好持久调整环境变量

调整环境变量顺序

该问题虽然可以每次手工调整$env:Path但终究太麻烦,可以首先设置开发者模式中允许执行未签名的 PowerShell 脚本,然后修改在$PROFILE处创建文件完成。

1. 允许执行未签名的本地 PowerShell 脚本

这件事不需要管理员权限,没想到吧?Windows 11下调整路径为

系统 > 开发者选项 > PowerShell > 更改执行策略,以允许本地 PowerShell 脚本在未签名的情况下运行。远程脚本需要签名

这样一来就可以设定自己的$PROFILE了。

2. 调配$PROFILE

在命令行输入:

PS C:\Users\pc> $PROFILE
C:\Users\pc\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

如果文件不存在,手工创建此文件,然后内容写入:

$prepend = "C:\Users\pc\.local\bin;C:\Users\pc\AppData\Local\Programs\Git\bin"
if ($env:PATH -notlike "$prepend*") {
    $env:PATH = "$prepend;" + $env:PATH
}

如果想要把特定版本的 cmake 提前,只要把 cmake bin 目录写入到$prepend里。总之可以把任何想要的目录加到最前面了。

推荐创建~/.local/bin/然后把小工具放进去,方便快捷。

持久化用户环境变量

该问题可通过setx实现,比如设置代理:

setx HTTP_PROXY "http://127.0.0.1:7890"
setx HTTPS_PROXY "http://127.0.0.1:7890"

或者调整 PATH:

setx PATH "$($env:Path);C:\mytools\bin"

前面调整的$PROFILE并不能在非命令行程序上生效,像配置代理或者顺序不重要的 Path,就可以放到这里来