如何评估Windows环境变量?

mjs*_*jsr 19 windows environment-variables

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

spl*_*ash 15

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

用户环境变量

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

  • @ Ps1CsCpp,我不认为你说的是​​对的.该文章指出用户PATH条目被附加到系统范围的PATH.对于您的方案,空用户PATH对提供给进程的PATH没有影响.换句话说,将空字符串添加到系统PATH的末尾将不起作用.我在Windows 8上测试了这个. (2认同)

Sim*_*mon 11

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


Jon*_*ndt 10

飞溅西蒙在他们的答案中所说的一切都是正确的。附加用户路径变量的想法已被强调,我相信这种差异的后果需要一些额外的处理。

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

当你执行一个可执行程序(或任何可执行脚本,如.bat.vbs等),则无需提供完全合格的路径。

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

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

java.exe -version

java -version
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

@echo off
echo %PATHEXT%
pause
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这些是:

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

这是什么意思呢?

鲜明的对比到其他环境变量,用户路径不允许您覆盖系统路径。情况正好相反。从上面的例子来看,在很多情况下你可能会改变 Java 的默认版本。但是,如果系统路径中已经列出了 Java 版本,则该版本总是最先找到的,因为路径是按顺序搜索的,从左到右,并且用户路径附加在右侧-hand 侧,系统路径在左侧。

我该怎么办?

如果您无权访问系统环境变量,则无法使用用户路径覆盖系统路径上的默认程序。(事实上​​,一定是这样,否则某些程序会停止正常工作,并使您的系统受到恶意软件的篡改。没有人想要这样。)

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