繁体   English   中英

如何评估Windows环境变量?

[英]How are Windows Environment Variables evaluated?

如果我有一个具有相同名称的系统和用户环境变量,它们是如何处理的? 它们是连在一起的吗? 用户变量是否覆盖系统变量? 考虑到这一点,如果我需要在Path变量中添加一些内容,添加它会更方便吗?

我认为这篇文章应该回答你的问题: Windows NT中的环境变量

用户环境变量

用户环境变量也可以从控制面板查看。 用户可以在User Environment Variables for User字段中添加,删除或修改环境变量。 这些变量优先于系统环境变量。 用户路径将附加到系统路径。

一切都说,在他们的答案是正确的。 要绝对清楚,评估用户路径环境变量的方式与评估其他用户环境变量之间存在差异。 常规用户环境变量完全覆盖具有相同名称的系统(如果两者都存在),但仅针对指定的特定用户。 但是,用户路径变量的处理方式不同 它在评估时附加到系统路径变量,而不是完全替换它。 我相信泼水说明了,但他们这么简洁地做到了我认为它需要拼写出来。

在他们的回答中,一切引人注目西蒙说的都是正确的。 已经强调了附加用户路径变量的想法,并且我认为这种差异的后果需要一些额外的处理。

Path =%Path%(系统); %Path%(用户)

当您执行可执行程序(或任何可执行脚本,如.bat.vbs等)时,您不需要提供完全限定的路径。

例如,要运行java ,您可以输入以下任何一个:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

第一个示例使用完全限定的路径。 这将始终在该确切路径上使用Java的版本。

第二个示例将遍历%Path%环境变量中的每个目录,查找名为java.exe的可执行文件。 它将运行第一个找到的,并停止搜索。 如果%Path%上有两个名为java.exe文件,则只使用找到的第一个文件。

第三个示例与第二个示例一样,将迭代%Path%列出的目录。 此外,由于未提供文件扩展名,因此可执行文件扩展名列表将按照%PATHEXT%环境变量中指定的顺序附加到文件名。 如果%Path%上有几个名为java.comjava.exejava.bat等的文件,则只使用找到的第一个文件。

您可以通过创建以下批处理文件来查看系统上的可执行路径扩展名列表:

@echo off
echo %PATHEXT%
pause

在我的机器上,这些是:

.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC;的.py

这是什么意思呢?

其他环境变量形成鲜明对比的是,用户路径不允许您覆盖系统路径。 情况恰恰相反。 从上面的示例中,您可能会在很多情况下更改Java的默认版本。 但是,如果系统路径中已经列出了Java版本,那么将始终首先找到该版本,因为从左到右按顺序搜索路径,并在右侧附加用户路径 - 手边,系统路径在左侧。

我能做些什么呢?

如果您无权访问系统环境变量,则无法使用用户路径覆盖系统路径上的默认程序。 (事实上​​,它必须是这种方式,或者某些程序会停止正常工作,它会打开你的系统来篡改恶意软件。没有人想要那样。)

相反,如果必须使用特定版本,则必须使用完全限定的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM