![如何让每个 PATH 条目仅保留一次?](https://linux22.com/image/1534290/%E5%A6%82%E4%BD%95%E8%AE%A9%E6%AF%8F%E4%B8%AA%20PATH%20%E6%9D%A1%E7%9B%AE%E4%BB%85%E4%BF%9D%E7%95%99%E4%B8%80%E6%AC%A1%EF%BC%9F.png)
我刚刚尝试添加一些内容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()
答案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 上。