找回密码
 立即注册
首页 业界区 安全 Powershell 重新排列去重 Windows环境变量

Powershell 重新排列去重 Windows环境变量

迎脾 2025-6-8 13:07:54
最近乱搞环境变量,然后有些重复了,遂写个脚本去重下排序下。

环境变量有长度限制,如果超出了,比如SqlServer相关的,将共同路径单独搞个变量声明下,比如
1.png

将其路径手动替换成如下,可大幅压缩变量长度
2.png

但是,Powershell脚本在获取环境变量时又会将这些恢复成原路径,建议点击编辑文本,将其拷贝下来,替换脚本中的$list变量值。
好了,注意事项说完了,贴下脚本,建议操作前备份下检查下
  1. # 直接获取变量,如%JAVA_HOME%会显示原文,可能导致长度超过2047导致部分失效
  2. $list = $env:Path -split ";"
  3. # 推荐这种从系统界面拷贝获取示例
  4. # $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 ";"
  5. $uniqueArray = $list | Select-Object -Unique
  6. # 存储最终结果数组
  7. $existList = @();
  8. foreach ($element in $uniqueArray) {
  9.     $path = $element;
  10.     # 如果使用了变量
  11.     if ($element.StartsWith("%")) {
  12.         $firstIndex = $element.IndexOf('%');
  13.         $endIndex = $element.LastIndexOf('%');
  14.         $envName = $element.Substring($firstIndex, $endIndex - $firstIndex + 1);
  15.         # Directory不支持直接使用环境变量,需要手动取相关值后替换判断
  16.         $path = $element.Replace($envName, [System.Environment]::GetEnvironmentVariable($envName.Replace("%", "")));
  17.     }
  18.     # 如果目录存在
  19.     if ([System.IO.Directory]::Exists($path)) {
  20.         $existList += $element;
  21.     }
  22. }
  23. # 打印最终结果
  24. # foreach ($element in $existList) {
  25. #     Write-Host $element
  26. # }
  27. $final = $existList -join ';'
  28. Write-Host $final
  29. [Environment]::SetEnvironmentVariable("PATH", $final , "Machine")
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册