1.介绍
我们在学习java之初会去安装jdk,安装好的第一件事是配置环境变量,那么我们所说的环境变量是什么?
环境变量(environment variables)
环境变量可以理解为一种存储系统配置信息的“全局变量”。它们包含了操作系统和应用程序在运行时所需的各种信息,比如文件路径、系统目录、临时文件夹位置等。
简单来说,环境变量就像是给系统或程序留下的一张“便签”,上面写着“我的安装目录在这里”或“临时文件请放在这里”,这样其他程序就能方便地找到所需资源,而无需用户每次都手动指定。
Windows 中的环境变量主要分为两类:系统变量和用户变量。
系统变量 (System Variables)
- 作用范围:全局生效。它对这台电脑上所有用户账户都有效。
- 典型用途:存放系统运行所必需的核心路径和配置。例如,
SystemRoot变量指向 Windows 的安装目录(通常是C:\Windows),Path变量中包含系统关键组件的路径。 - 修改权限:修改系统变量通常需要管理员权限。
用户变量 (User Variables)
- 作用范围:仅对当前用户生效。它只影响你当前登录的那个账户,不会影响电脑上的其他用户。
- 典型用途:存放个人化的配置。例如,
TEMP变量定义了当前用户的临时文件存放位置,或者开发者为自己安装的 Python、Java 等工具设置专属路径。 - 修改权限:修改用户变量通常不需要管理员权限。
常用的是PATH环境变量,其作用是告诉系统,当要求系统运行一个程序而没有告诉系统若在当前目录下面没有寻找到此程序,还应到哪些目录下去寻找。
在设置-系统-系统信息-高级系统设置里可以找到环境变量。
2.测试案例
平时打开一个应用程序,一般是双击桌面图标或在开始菜单命令项,无论是桌面的快捷图标还是开始菜单命令项都包含了应用程序的安装位置信息,如果知道了一个应用程序的安装目录位置,也可以通过命令行工具进入启动程序所在的文件,这里以 “Word”软件为例。
我们win+r打开终端,输入Word.exe,参见下图:
我们看到我们是无法启动Word的,为什么? 首先,我们需要知道在命令提示符界面输入Word的作用是告诉操作系统帮我们启动Word,操作系统就会先对当前的C:Users\28470目录进行查找,但是并没有在当前的目录找到,之后去系统目录去找,还是不存在,最后操作系统就会进Path环境变量对其进行查找,由于Path环境变量也不存在该目录,所以会报出当前错误。
所以首先应该找到word所在目录:
C:\Program Files\Microsoft Office\root\Office16
目录里的WINWORD.EXE就是word的启动文件。
配置到系统环境变量的path变量中:
win+r,输入WINWORD.EXE,最后会从该环境变量里找到其启动文件所在目录,回车即可启动word
3.查找顺序
当你在Win+R或命令行输入word时,Windows 的查找逻辑如下:
当前目录
- Windows 首先会检查你当前所在的目录(比如
C:\Users\28470)里有没有叫word.exe的文件。 - 如果没有,继续下一步。
- Windows 首先会检查你当前所在的目录(比如
系统目录
- 接着,它会去 Windows 的系统目录(如
C:\Windows\System32)里找。 - 如果没有,继续下一步。
- 接着,它会去 Windows 的系统目录(如
Path 环境变量(合并后的)
- 这才是关键一步。Windows 会把 “用户变量”中的 Path 和 “系统变量”中的 Path 合并起来,形成一个完整的搜索列表。
- 顺序:通常情况下,用户变量的 Path 会排在系统变量的 Path 前面(但这取决于具体的 Windows 版本和配置,一般建议认为它们是合并在一起搜索的)。
- 它会依次检查 Path 列表中的每一个文件夹,看里面有没有
word.exe。
找不到
- 如果以上所有地方都找遍了还是没有,就会报错:“Windows 找不到文件 'word'”。
以word案例为例:
查找逻辑:
Path 内容:C:\Program Files\Microsoft Office\root\Office16\
在用户目录和系统目录都找不到该文件时,去path变量寻找。
系统逻辑:拿文件夹路径 + 你输入的文件名 =C:\...\Office16\+WINWORD.EXE结果:拼出来是C:\...\Office16\WINWORD.EXE。找到了!运行!
先到先得:只要在某一个目录里找到了对应的文件名,搜索就立刻结束。
顺序很重要:如果两个地方有同名文件,排在Path列表最上面的那个会生效。
需要注意的是:环境变量Path只能帮系统找到真正的程序文件(.exe, .bat, .cmd),它看不懂快捷方式(.lnk)。
4.存取变量
除了path变量外,还有其他变量名:
截图里的那些变量(MYSQL_HOME,NVM_HOME等),它们的作用是“存数据”
比如
NVM_HOME=D:\software\java\nvm- 这只是为了方便。在配置
Path时,你可以写%NVM_HOME%\nvm.exe,而不是写死那一长串路径。 - 如果你改了
NVM_HOME的值,所有引用它的地方都会自动更新。
- 这只是为了方便。在配置
5.命令行窗口设置环境变量
下面的了解即可,我也就不实验了,还是建议在图形化界面操作。
临时配置(使用set命令)
这种方式只在当前 CMD 窗口有效,窗口一关,配置就没了。适合测试。
1.查看特定变量(比如 Path):cmd
echo %path%结果:
设置/修改一个变量(临时):cmd
set 变量名=变量值加路径到 Path(临时):cmd
set Path=%Path%;C:\你的新路径(注意:%path%代表保留原来的内容,;是分号,用来分隔不同的路径)
永久配置(使用setx命令)
这种方式会真正修改系统设置,即使重启电脑也有效。
设置一个新的变量(永久):cmd
setx 变量名 "变量值"追加路径到 Path(永久 - 用户变量):cmd
setx Path "%Path%;C:\你的新路径"注意:这会把当前系统 Path 的所有内容复制一份写入到“用户变量”的 Path 中。
追加路径到 Path(永久 - 系统变量):
需要管理员权限运行 CMD,然后使用/M参数:cmd
setx Path "%Path%;C:\你的新路径" /M重要提示
- 窗口生效问题:
使用setx修改成功后,当前这个 CMD 窗口不会生效!你必须新打开一个 CMD 窗口,配置才会生效。 - Path 长度限制:
使用setx修改 Path 时要小心,因为setx对字符长度有限制(通常是 1024 个字符)。如果你的 Path 本来就很长,用setx可能会导致后面的路径被截断(丢失)。对于复杂的 Path 修改,建议还是用图形界面操作更安全。 - 不要覆盖:
千万不要直接写setx Path "C:\新路径",这样会清空原本所有的 Path 配置,导致系统命令(如ipconfig)都无法使用!一定要带上%Path%。