答案1
您想要的命令是setx.exe
(它是一个命令行程序)。用于setx /?
获取使用信息,但对于您的用例,它归结为以下内容:
setx MYVAR "The value of my variable"
请注意,这setx
不会更新正在运行的程序(即 CMD 或 Powershell)的当前环境变量;您还需要使用该set
命令来更新 shell 中的变量。
另外两种方法可以实现此目的:
- 使用 PowerShell 调用 .NET 函数
[System.Environment]::SetEnvironmentVariable(<varname>, <value>, [System.EnvironmentVariableTarget]::User)
(您可以用1
或"user"
替代[System.EnvironmentVariableTarget]::User
;它是一个枚举) - 直接编辑注册表。https://stackoverflow.com/questions/573817/where-are-environment-variables-stored-in-registry,位置为 HKCU\Environment。例如,您可以添加如下值(使用程序
reg.exe
):reg add /v <VARNAME> /d <VALUE>
如果您想要更新每个用户的 PATH,而又不想将所有用户(本地计算机)的 PATH 值添加到您的个人 PATH,那么您需要使用一些技巧。使用reg query
或[System.Environment]::GetEnvironmentVariable(<varname>, [System.EnvironmentVariableTarget]::User)
,您可以从注册表中获取当前值,而不是获取进程的 PATH 当前值(它是用户和计算机值的串联)。使用 PS,您甚至可以将此值设置为临时变量:
set mypath $([Environment]::GetEnvironmentVariable("Path", 1))
创建一个名为“mypath”的临时(本地、非环境)变量,并将其设置为 PATH 环境变量的当前用户特定值(Windows 环境变量名不区分大小写)。
echo $mypath
以确保您理解正确。
set mypath ($mypath + ';C:\foo\bar'); echo $mypath
附加C:\foo\bar
到临时变量并回显结果。
setx Path $mypath
使用连接的字符串更新环境变量。
set $env:Path ($env:Path + ';C:\foo\bar')
还可以更新当前的 PowerShell 会话,或者只是从 Windows 资源管理器(开始、任务栏等)启动一个新的会话。