Powershell 重新排列去重 Windows环境变量
最近乱搞环境变量,然后有些重复了,遂写个脚本去重下排序下。
环境变量有长度限制,如果超出了,比如SqlServer相关的,将共同路径单独搞个变量声明下,比如
将其路径手动替换成如下,可大幅压缩变量长度
但是,Powershell脚本在获取环境变量时又会将这些恢复成原路径,建议点击编辑文本
,将其拷贝下来,替换脚本中的$list
变量值。
好了,注意事项说完了,贴下脚本,建议操作前备份下检查下
# 直接获取变量,如%JAVA_HOME%会显示原文,可能导致长度超过2047导致部分失效
$list = $env:Path -split ";"
# 推荐这种从系统界面拷贝获取示例
# $list="%JAVA_HOME%\bin;C:\app\Administrator\product\21c\dbhomeXE\bin;%ProgramFiles86%\Common Files\Oracle\Java\javapath;%windir%\system32;%windir%;%windir%\System32\Wbem;%windir%\System32\WindowsPowerShell\v1.0\;%windir%\System32\OpenSSH\;%ProgramFiles86%\Intel\Intel(R) Management Engine Components\DAL;%ProgramFiles%\Intel\Intel(R) Management Engine Components\DAL;%MSSQL86%\100\Tools\Binn\" -split ";"
$uniqueArray = $list | Select-Object -Unique
# 存储最终结果数组
$existList = @();
foreach ($element in $uniqueArray) {
$path = $element;
# 如果使用了变量
if ($element.StartsWith("%")) {
$firstIndex = $element.IndexOf('%');
$endIndex = $element.LastIndexOf('%');
$envName = $element.Substring($firstIndex, $endIndex - $firstIndex + 1);
# Directory不支持直接使用环境变量,需要手动取相关值后替换判断
$path = $element.Replace($envName, [System.Environment]::GetEnvironmentVariable($envName.Replace("%", "")));
}
# 如果目录存在
if ([System.IO.Directory]::Exists($path)) {
$existList += $element;
}
}
# 打印最终结果
# foreach ($element in $existList) {
# Write-Host $element
# }
$final = $existList -join ';'
Write-Host $final
[Environment]::SetEnvironmentVariable("PATH", $final , "Machine")
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇