如何让每个 PATH 条目仅保留一次?

如何让每个 PATH 条目仅保留一次?

我刚刚尝试添加一些内容PATH并发现它由于重复而变得不成比例:

C:\Users\user>setx Path "%Path%;C:\Python34"
WARNING: The data being saved is truncated to 1024 characters.
SUCCESS: Specified value was saved.

当我打印该PATH值时,我意识到它充满了重复的条目(C:\Program Files\7-Zip甚至输入了 3 次),因此没有地方存放新数据。有没有办法在不进行手动编辑的情况下删除重复项,最好是在不安装第三方软件的情况下删除重复项?PATH也欢迎任何有关如何避免重复的建议。

我发现了一个解决方法已经,但在 中有重复仍然感觉不是最理想的PATH

答案1

有没有办法无需手动编辑即可删除重复项?

最好不要安装第三方软件?

如果你不介意使用 PowerShell 脚本,那么你可以使用以下脚本从中删除重复项Microsoft 脚本中心

检查 PATH 环境变量中重复路径的脚本

有时重复安装软件可能会在 PATH 环境变量中添加重复条目。由于环境变量的大小有硬编码限制,因此在一段时间内,您可能会达到该限制。此脚本检查 PATH 环境变量并删除任何重复的路径条目。

$RegKey = ([Microsoft.Win32.Registry]::LocalMachine).OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\Environment", $True) 
$PathValue = $RegKey.GetValue("Path", $Null, "DoNotExpandEnvironmentNames") 
Write-host "Original path :" + $PathValue  
$PathValues = $PathValue.Split(";", [System.StringSplitOptions]::RemoveEmptyEntries) 
$IsDuplicate = $False 
$NewValues = @() 
  
ForEach ($Value in $PathValues) 
{ 
    if ($NewValues -notcontains $Value) 
    { 
        $NewValues += $Value 
    } 
    else 
    { 
        $IsDuplicate = $True 
    } 
} 
  
if ($IsDuplicate) 
{ 
    $NewValue = $NewValues -join ";" 
    $RegKey.SetValue("Path", $NewValue, [Microsoft.Win32.RegistryValueKind]::ExpandString) 
    Write-Host "Duplicate PATH entry found and new PATH built removing all duplicates. New Path :" + $NewValue 
} 
else 
{ 
    Write-Host "No Duplicate PATH entries found. The PATH will remain the same." 
} 
  
$RegKey.Close() 

来源如何检查 PATH 环境变量中的重复路径

答案2

你可以使用名为 pathtub 的 python 包来完成此操作(我是这个包的作者)

安装

pip install pathtub

用法

from pathtub import clean
# Default parameter values shown
clean(sort=True, remove_non_existent=True, remove_user_duplicates=True)

它有什么作用

  • 删除重复项以及“用户路径”和“系统路径”中的空条目(;;)(比较两个文件夹时忽略尾部的反斜杠)。编辑“系统路径”需要以管理员权限执行 python。
  • 从“用户 PATH”中删除“系统 PATH”中的条目(可选,默认启用)。由 -parameter 控制remove_user_duplicates
  • 按字母顺序对 PATH 进行排序(可选,默认启用)。由参数控制sort
  • 从 PATH 中删除文件系统中不存在的文件夹(可选,默认启用)。由 -parameter 控制remove_non_existent

有关更详细的描述,请参阅文档在 GitHub 上。

相关内容