Windows 10 PATH 中的相邻分号是什么意思?

What does abutted semicolons mean in Windows 10 PATH?

提问人:user2153235 提问时间:8/31/2023 最后编辑:user2153235 更新时间:9/16/2023 访问量:164

问:

我在 Windows 10 上安装了 Anaconda。当我运行 Spyder 和 查询环境变量,它包含一对 相邻的分号。这里是 ,每个分号 为清楚起见,后跟一行新行:PATHPATH

C:\Users\User.Name\anaconda3\envs\py39;
C:\Users\User.Name\anaconda3\envs\py39\Library\mingw-w64\bin;
C:\Users\User.Name\anaconda3\envs\py39\Library\usr\bin;
C:\Users\User.Name\anaconda3\envs\py39\Library\bin;
C:\Users\User.Name\anaconda3\envs\py39\Scripts;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\WINDOWS\System32\OpenSSH\;
C:\Program Files\MATLAB\R2023a\runtime\win64;
C:\Program Files\MATLAB\R2023a\bin;
C:\Users\User.Name\AppData\Local\Microsoft\WindowsApps;
;
C:\Users\User.Name\AppData\Local\Programs\Microsoft VS Code\bin

倒数第二行有一个单独的分号。这是什么意思? 它的意思和?我问的原因是因为康达 环境 中作为倒数第二个目录,而 其他人是一样的。.;.;PATH

后记 2023-09-11:当前工作目录可能已被删除,因为 Windows 会自动在变量中的路径之前搜索当前目录,如此所述(第 5 节:“当前目录隐式包含在 Windows 的 PATH 中”)。然而,这不是一个正式的 Microsoft 页面,它也留下了一个问题,即为什么多余的内容没有与 一起删除。.PATH;.

Windows 路径

评论

5赞 Simon Mourier 9/9/2023
这个问题更适合 superuser.com
0赞 user2153235 9/11/2023
谢谢你的建议,西蒙。我肯定会在那里发帖,但我的谷歌搜索显示 StackOverflow 更适合编码/脚本和开发,而 SuperUser 更适合应用程序级最终用户。请你详细说说你的想法吗?谢谢。
1赞 Simon Mourier 9/11/2023
除了这不是一个真正的开发问题之外,我没有具体的想法,它不涉及语言、抄写或编码,例如:superuser.com/questions/284342/...。特定应用如何显示 PATH 并不重要。从命令行运行“SET”,或使用 Windows 的 env 变量编辑器。
0赞 user2153235 9/11/2023
好的,我会在那里发帖。它仍然让人感觉不对劲,因为引用的问答涉及 Window 搜索用户级应用程序的位置。相比之下,我的问题的背景更多的是开发环境之间的互操作,即用于管理开发包的 Conda 环境与用于代码开发的 Spyder 环境。或者更确切地说,后者是一个探索性分析环境,可以很容易地为以后的实现制作应用程序原型 - 使用相同的语言(Python)。REPL 模糊了开发和用户级别之间的界限。感谢您详细说明您的理由。
1赞 Ben Voigt 9/16/2023
FWIW,“后记”引用了一个有点混乱的消息来源。 不是“隐式包含在变量中” PATH 变量只是 Windows 搜索的相当长的位置列表中的一个,“当前工作目录”也在该列表中。.PATH

答:

1赞 Freeman 9/13/2023 #1

我认为,PATH变量中唯一的分号意味着列出了一个空目录。但别担心,它不会真正影响任何事情。你可以忽略它。分号本身没有任何特殊含义,例如表示当前目录的点 (.) 。

相比之下,Conda 环境可以存在于 Windows 以外的操作系统中。因此包含在 PATH 中,以便更轻松地在当前目录中运行程序,而无需键入整个路径。.;

同样,在 Windows 中,当前目录不会自动包含在 PATH 中,因为它是不必要的。显式添加包括当前目录,用于在 Conda 环境中搜索程序,以查找由非 Windows 操作系统托管的那些情况。.;

至于为什么(当前目录)可能已从PATH中删除,可能是因为Windows已经默认搜索了。但我们不能确定为什么额外的分号仍然存在。..

引用:

https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/path

评论

0赞 user2153235 9/13/2023
您能否为当前目录不会自动包含在 Windows 中的声明提供对权威来源的引用?在我的“后记 2023-09-11”中,我引用了一个非权威消息来源的说法。在我看来,权威来源要么是Microsoft,要么是具有良好专业知识记录的在线身份。谢谢。
1赞 Freeman 9/14/2023
这很奇怪,它也没有为我显示,它给出了一个 404 错误。很抱歉,让我再提供两个链接,但一般来说,在PATH中包含当前目录可能会带来安全风险,特别是如果当前目录设置为网络位置或存在恶意文件。(1)docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/......(2)learn.microsoft.com/en-us/windows-server/administration/......
1赞 user2153235 9/14/2023
我理解你对风险的描述。通过这个问题,我只是试图建立正式的行为。你的回答说了两件事,在我看来它们是对立的。它在 Windows 中是这么说的。 不会自动包含,但您说默认情况下包含它。能够修改你的答案以消除这种矛盾吗?谢谢。将链接添加到您的答案中也会有所帮助。.
1赞 Freeman 9/14/2023
在 Windows 中,当前目录(由点“.”表示)不会自动包含在 PATH 变量中。但是,值得注意的是,Windows 在搜索可执行文件时默认包含当前目录。对于 Conda 环境,它们在 PATH 中包含“.;”,以便于在不指定完整路径的情况下在当前目录中运行程序。此添加明确包括用于在 Conda 环境中搜索程序的当前目录。
1赞 user2153235 9/14/2023
谢谢你的澄清,弗里曼。我试图在编辑您的答案时提出这些澄清。如果你觉得他们很明智,如果你愿意接受他们,谢谢。
0赞 Mayank_kr_verma 9/14/2023 #2

分号本身(如 ;)表示当前目录。在 PATH 环境变量的上下文中,它实质上表示“当前目录”,通常是运行命令的目录。

因此,在您的 PATH 配置中,这个 ;在两个条目之间表示当前目录包含在 PATH 中。

评论

2赞 user2153235 9/14/2023
我很困惑。目录之间用于分隔目录。这并不意味着它在 .我想知道 in 的出现是否意味着 PySpark 脚本已从中删除,因为 Windows 已经默认搜索,正如 Freeman 所解释的那样。也许多余的东西被错误地遗忘了(尽管正如弗里曼所说,它没有效果)。;.PATH;;PATH.PATH.;