如果我有一个同名的系统和用户环境变量,它们是如何处理的?它们是连在一起的吗?用户变量是否覆盖系统变量?考虑到这一点,如果我需要在Path
变量中添加一些内容,添加它会更方便吗?
答案 0 :(得分:15)
我认为这篇文章应该回答你的问题:Environment variables in Windows NT
用户环境变量
用户环境变量可以 从控制面板查看。该 用户可以添加,删除或修改 用户中的环境变量 用户字段的环境变量。 这些变量优先于 系统环境变量。用户 path被附加到系统路径。
答案 1 :(得分:11)
splash中所说的所有their answer都是正确的。要绝对清楚,评估用户路径环境变量的方式与评估其他用户环境变量之间存在差异。常规用户环境变量完全覆盖具有相同名称的系统(如果两者都存在),但仅针对指定的特定用户。 但是,用户路径变量的处理方式不同。在评估时,它是附加到系统路径变量,而不是完全替换它。我相信泼水说明了这一点,但他们这么简洁,我认为它需要拼写出来。
答案 2 :(得分:4)
splash和Simon在答案中所说的一切都是正确的。附加了用户路径变量的想法已经突出显示,我相信这种差异的后果需要一些额外的处理。
路径=%路径%(系统); %Path%(用户)
当您执行可执行程序(或任何可执行脚本,例如<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="contentNeed">
</div>
,.bat
等)时,您不需要提供完全限定的路径。
例如,要运行.vbs
,您可以输入以下任何内容:
java
第一个示例使用完全限定的路径。这将始终在该确切路径上使用Java版本。
第二个示例将遍历C:/Program Files (x86)/Java/jre6/bin/java -version
java.exe -version
java -version
环境变量中的每个目录,查找名为%Path%
的可执行文件。它将运行第一个找到的,并停止搜索。 如果java.exe
上某处有两个名为java.exe
的文件,则只会使用找到的第一个文件。
第三个例子和第二个例子一样,将迭代%Path%
中列出的目录。此外,由于未提供文件扩展名,因此可执行文件扩展名列表将按照%Path%
环境变量中指定的顺序附加到文件名称。 如果%PATHEXT%
上某处有多个名为java.com
,java.exe
,java.bat
等的文件,则只会使用找到的第一个文件。
您可以通过创建以下批处理文件来查看系统上的可执行路径扩展名列表:
%Path%
在我的机器上,这些是:
.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC;的.py
在 明显对比 与其他环境变量中,用户路径不允许您覆盖系统路径。情况恰恰相反。从上面的示例中,您可能会在很多情况下更改Java的默认版本。但是,如果系统路径中已经列出了Java版本,那么将始终首先找到该版本,因为从左到右按顺序搜索路径,并在右侧附加用户路径 - 手边,系统路径在左边。
如果您无权访问系统环境变量,则无法使用用户路径覆盖系统路径上的默认程序。 (事实上,必须这样,或某些程序会停止正常工作,它会打开你的系统来篡改恶意软件。没有人想要那样。)
相反,如果必须使用特定版本,则必须使用完全限定的路径。