PowerShell实现Win11环境变量追加及备份
最近重装了系统,之前配置的环境又得重新配置,感觉很繁琐所以查阅资料实现了用脚本配置环境变量,这样只要保留原先的JDK等环境文件夹就可以一键配置了。
一开始我准备采用比较熟悉的bat脚本来实现
setx PATH "%PATH%;%myPath%" /m
但setx会覆盖原有path!!,故最后使用PowerShell实现,脚本如下
# 追加环境变量path 。文件夹下执行打开PowerShell输入& '.\新建.ps1'回车即可
$envPath = [Environment]::GetEnvironmentVariable("Path", "Machine")
$newPaths = @(
"C:\Users\zbz12\Desktop",
"C:\Users\zbz12\Desktop\RapidEEx64\HHH",
"C:\Users\zbz12\Desktop\RapidEEx64"
# 添加更多新路径如JavaPath之类的...
)
foreach ($newPath in $newPaths) {
if ($envPath -notlike "*$newPath*") {
$envPath += ";$newPath"
}
}
[Environment]::SetEnvironmentVariable("Path", $envPath, "Machine")
Write-Host "新路径已添加至系统环境变量Path。"`
这段代码是用于将指定的文件夹路径添加到系统环境变量Path中,并输出提示信息。
首先,代码通过使用[Environment]::GetEnvironmentVariable("Path", "Machine")
获取了当前系统环境变量Path的值,并将其存储在变量$envPath
中。
接下来,定义了一个新数组$newPaths
,其中包含了要添加到环境变量Path中的文件夹路径。
然后,通过foreach
循环遍历每个新路径$newPath
:
- 使用条件判断
$envPath -notlike "*$newPath*"
来检查新路径是否已经存在于环境变量Path中。如果不存在,则执行下面的代码。 - 将新路径
$newPath
追加到$envPath
后面,并在路径之间添加分号。 - 最后,使用
[Environment]::SetEnvironmentVariable("Path", $envPath, "Machine")
将更新后的$envPath
值设置为系统环境变量Path。
最后,使用Write-Host
输出提示信息"新路径已添加至系统环境变量Path。"。
请注意,此脚本需要以管理员权限运行才能成功修改系统环境变量。
脚本改进
本来到这里就结束了但经过测试,发现脚本会把Path 中引用的变量会被自动替换为变量的值,如 %JAVA_HOME% 会被替换为 JAVA_HOME所在位置如D:\008_Soft\Java\JDK1.8
。又是一番查阅我找到了[Environment]::ExpandEnvironmentVariables()
方法
[Environment]::ExpandEnvironmentVariables()
是一个静态方法,它属于System.Environment
类,用于扩展或展开环境变量的引用。环境变量是在操作系统中定义的一些特定值,用于存储有关系统配置、用户配置和其他信息的数据。在Windows系统中,环境变量通常使用
%变量名%
的形式表示,例如%windir%
表示Windows系统目录的路径。
[Environment]::ExpandEnvironmentVariables()
方法接受一个字符串参数,该参数包含环境变量引用。它会将引用的环境变量替换为实际的值,并返回替换后的字符串。例如,假设
$newPath
的值为%windir%\System32
,即Windows系统目录下的System32文件夹。使用[Environment]::ExpandEnvironmentVariables($newPath)
会将%windir%
替换为实际的Windows系统目录路径,返回C:\WINDOWS\System32
。在脚本中,我们使用
[Environment]::ExpandEnvironmentVariables($newPath)
来获取新路径中环境变量的实际值,并将其存储在变量$expandedPath
中。这样,无论新路径中是否包含环境变量引用,我们都可以确保将实际的路径添加到环境变量Path中。
最终脚本如下
$envPath = [Environment]::GetEnvironmentVariable("Path", "Machine")
$newPaths = @(
"C:\Users\zbz12\Desktop",
"C:\Users\zbz12\Desktop\RapidEEx64\HHH",
"C:\Users\zbz12\Desktop\RapidEEx64"
# 添加更多新路径...
)
foreach ($newPath in $newPaths) {
$expandedPath = [Environment]::ExpandEnvironmentVariables($newPath)
if ($envPath -notlike "*$expandedPath*") {
$envPath += ";$expandedPath"
}
}
[Environment]::SetEnvironmentVariable("Path", $envPath, "Machine")
Write-Host "新路径已添加至系统环境变量Path。"
将以上代码保存为add_path.ps1文件,运行PowerShell,导航到脚本所在的目录,执行以下命令来运行脚本:
& '.\add_path.ps1'
脚本将读取系统中的Path环境变量,然后,脚本会检查Path环境变量是否包含以前存在的%%变量。如果包含,则不修改Path环境变量;如果不包含,则将新的文件夹路径追加到Path环境变量中。
执行完毕后,可以在PowerShell中输入$env:Path来验证Path环境变量是否成功追加了新的文件夹路径,且不展开以前存在的%%变量。
本文来自博客园,作者:KMP,转载请注明原文链接:https://www.cnblogs.com/touchTomorrow/p/17578539.html