在Windows环境路径中出现重复的条目

4
出于某些我不知道的原因,我的echo %path%存在许多重复的C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\。据我所知,长%path%会减慢搜索进程,这样安全吗?可以删除这些重复项吗?
我还注意到有两个版本的路径变量:一个是用户变量,另一个是系统变量。如果我以普通用户身份在命令提示符中键入echo %path%,它将显示这两个版本的连接(系统版本优先)。如果我要删除重复项,应该从哪个版本中删除?(粗体为系统版本) C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\MinGW\bin;C:\Python27;C:\Users\jie\AppData\Local\Microsoft\WindowsApps

不稳定的安装程序以破坏PATH系统变量而臭名昭著。特别是英特尔公司,它滥用了PATH并大肆宣传。只需使用控制面板>系统>高级>环境变量进行修复即可。 - Hans Passant
运行 => %windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables - Andrew
相关链接:https://superuser.com/questions/1223976/how-do-i-keep-each-path-entry-only-once/1541042#1541042(如何删除PATH中的重复项) - Niko Pasanen
在我升级到Win11的电脑上,我注意到一些操作系统路径在系统路径(高级系统属性,环境变量)中出现了两次:一次是“原始”的形式,例如“C:\Windows\System32\Wbem”,另一次是以“%systemroot%\system32\wbem”的形式。其中有4或5个这样的路径,包括%systemroot%=C:\Windows和%systemRoot%\system32=C:\Windows\System32。所有这些路径都在环境变量的%PATH%中出现了两次。 - Luc VdV
3个回答

4
在Microsoft Technet(Scriptcenter)上曾经有一个小的PowerShell脚本,用于检查重复路径:如何检查PATH环境变量中的重复路径
(原始位置已经消失,但archive.org保存了一个副本)
应该在具有管理员权限的PowerShell环境中运行。我在卸载任何软件后都会这样做(Windows 10 x64)。

2

我一直在想为什么一些进程在 PATH 环境变量中有重复的部分。 经过调查,问题发生在由 explorer.exe 启动的进程中。对于最初不是 explorer.exe 的子进程(或“子进程的子进程”)的进程不会出现此问题。

我认为 Windows PATH 环境变量的 用户部分 受以下因素影响:

  1. 这两个注册表项:
    • HKCU\Environment\Path
    • HKCU\Environment\1\Path

运行在用户上下文中的进程 explorer.exe 会加载 PATH 环境变量的两个条目。当 HKCU\Environment\1\Path 存在时,我删除了测试 HKCU\Environment\Path 条目。环境变量的重复部分不再存在。

非常小心地删除或修改此注册表键值。可能会引起其他意外问题,因为 Windows Path 环境变量会影响当前用户启动的所有新进程。

注意

微软鼓励使用App Paths,因为路径环境变量Path中的条目越多,Windows搜索指定文件所需的时间就越长。通过App Paths,您可以为每个可执行文件名称指定应在其中搜索可执行文件的文件夹。

更多信息:Microsoft Docs about App Paths

注意:由cmd.exe或.cmd或.bat启动的进程不会查看App Path键,即使您使用start process.exe,process.exe文件也会查看App Path\Process.exe\Path


有趣的是,这个答案帮助我理解为什么会有我没有预料到的条目! - Jean-Luc Amitousa Mankoy
跟进问题:如何启动代码,使其不是 explorer.exe 的后代? - Jann Poppinga
@Jann Poppinga:看起来这个问题有点不相关。 请尝试下一个.vbs脚本:“Set objShell = CreateObject(”Wscript.Shell“) objShell.Run”“C:\WINDOWS\system32\ping.exe“127.0.0.1 -t”它将创建一个进程,而不是explorer.exe的子进程,我想。 当您使用Sysinternals的Process Explorer时,您会发现它没有父进程ID。 - MassStorage
哦,抱歉,我没有意识到这个问题是关于重复条目的一般性问题,而不是关于 VS Code 报告这些条目并且无法调试测试的问题。无论如何,我可以通过这种方式启动一个孤立的 VS Code,但问题仍然存在。感谢您的努力。 - Jann Poppinga

1
您提到的路径是系统路径,应该保留在系统范围内的PATH变量中。您可以删除用户范围内PATH变量中的重复项,但是您应该重新启动并检查每个应用程序是否仍在工作(不是因为您删除了重复项,而是为了确保您没有错误地删除了某些内容)。像往常一样,在开始之前备份PATH变量。

每个范围内的重复项都可以安全地删除。列表在每个分号处分割,并搜索列表中的每个结果路径。如果有重复项,则最坏情况下相同的搜索会执行两次。在最好的情况下,系统可能会识别出重复项(我不确定是否会发生),但这意味着需要额外的识别工作。因此,您关于减慢速度的说法在任何情况下都是正确的。

您重复的原因(如果至少不是您)可能是您安装的某些应用程序不当地编辑了PATH变量。


1
谢谢!现在我的PATH只有原来长度的1/3了。搜索感觉更快了(或者这只是安慰自己的效果?) - John London
只要不会变慢或者出问题,我认为这样是可以的。不用客气。 - Chris Tophski
我也遇到了两个重复的值,删除它们从用户环境中帮助解决了问题。但我写了一个小的C#程序来检查机器、用户和进程环境。在进程和用户环境中,我发现了重复的分号 ;; - 但在Windows中,当我检查系统和用户环境时,一切看起来都正常。然后我看到用户环境中有 %PyCharm%,在C#中解析为 C:\Program Files\JetBrains\PyCharm 2022.2.1\bin;;。注意,可能还有其他变量包含了已经存在的分号。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接