一、概述

环境变量是操作系统用来指定运行环境的一些参数。比如临时文件夹位置和系统文件夹位置等。当你运行某些程序时,除了在当前文件夹中寻找外,还会到这些环境变量中去查找,比如“Path”就是一个变量,里面存储了一些常用的命令所存放的目录路径。

当启动cmd命令行窗口调用某一命令的时候,经常会出现“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”,如果你的拼写没有错误,同时计算机中确实存在这个程序,那么出现这个提示就是你的path变量没有设置正确,因为你的path路径,也就是默认路径里没有你的程序,同时你有没有给出你程序的绝对路径(因为你只是输入了命令或程序的名称而已),这是操作系统不知道去哪儿找你的程序,就会提示这个问题。

二、查看环境变量

可视化查看环境变量

路径: 控制面板\系统和安全\系统\高级系统设置\高级\环境变量...
Snipaste_2020-09-28_15-28-57.png

使用命令查看环境变量

使用 set 命令可以输出所有环境变量:

  1. C:\WINDOWS\system32>set
  2. ALLUSERSPROFILE=C:\ProgramData
  3. ANDROID_HOME=D:\Program Files\android-sdk
  4. ANDROID_SDK_ROOT=D:\Program Files\android-sdk
  5. APPDATA=C:\Users\quanzaiyu\AppData\Roaming
  6. CommonProgramFiles=C:\Program Files\Common Files
  7. CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
  8. CommonProgramW6432=C:\Program Files\Common Files
  9. COMPUTERNAME=DESKTOP-T1071CD
  10. ComSpec=C:\WINDOWS\system32\cmd.exe
  11. DriverData=C:\Windows\System32\Drivers\DriverData
  12. GITLAB_HOME=D:\Users\quanzaiyu\.docker\datas\gitlab
  13. GRADLE_HOME=D:\Program Files\gradle\gradle-6.3
  14. GRADLE_USER_HOME=D:\Users\quanzaiyu\.gradle
  15. HOMEDRIVE=C:
  16. HOMEPATH=\Users\quanzaiyu
  17. JAVA_HOME=D:\Program Files\openjdk\jdk-15
  18. JENKINS_HOME=D:\Users\quanzaiyu\.docker\datas\jenkins
  19. LOCALAPPDATA=C:\Users\quanzaiyu\AppData\Local
  20. LOGONSERVER=\\DESKTOP-T1071CD
  21. M2_HOME=D:\Program Files\maven\apache-maven-3.6.0
  22. MAVEN_HOME=D:\Program Files\maven\apache-maven-3.6.0
  23. NUMBER_OF_PROCESSORS=12
  24. OneDrive=E:\OneDrive
  25. OneDriveConsumer=E:\OneDrive
  26. OS=Windows_NT
  27. Path=C:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Program Files (x86)\NetSarang\Xshell 7\;C:\ProgramData\Miniconda3;C:\ProgramData\Miniconda3\Library\mingw-w64\bin;C:\ProgramData\Miniconda3\Library\usr\bin;C:\ProgramData\Miniconda3\Library\bin;C:\ProgramData\Miniconda3\Scripts;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\Git\cmd;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\quanzaiyu\AppData\Local\Microsoft\WindowsApps;C:\Users\quanzaiyu\AppData\Roaming\npm;C:\Users\quanzaiyu\AppData\Local\Yarn\bin;C:\Users\quanzaiyu\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\Bandizip\;D:\Program Files\gradle\gradle-6.3\bin;D:\Program Files\openjdk\jdk-15\bin;D:\Program Files\android-sdk\tools;D:\Program Files\android-sdk\platform-tools;D:\Program Files\maven\apache-maven-3.6.0\bin
  28. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  29. PROCESSOR_ARCHITECTURE=AMD64
  30. PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
  31. PROCESSOR_LEVEL=6
  32. PROCESSOR_REVISION=9e0a
  33. ProgramData=C:\ProgramData
  34. ProgramFiles=C:\Program Files
  35. ProgramFiles(x86)=C:\Program Files (x86)
  36. ProgramW6432=C:\Program Files
  37. PROMPT=$P$G
  38. PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
  39. PUBLIC=C:\Users\Public
  40. SystemDrive=C:
  41. SystemRoot=C:\WINDOWS
  42. TEMP=C:\Users\QUANZA~1\AppData\Local\Temp
  43. TMP=C:\Users\QUANZA~1\AppData\Local\Temp
  44. USERDOMAIN=DESKTOP-T1071CD
  45. USERDOMAIN_ROAMINGPROFILE=DESKTOP-T1071CD
  46. USERNAME=quanzaiyu
  47. USERPROFILE=C:\Users\quanzaiyu
  48. windir=C:\WINDOWS
  49. WSLENV=WT_SESSION::WT_PROFILE_ID
  50. WT_PROFILE_ID={0caa0dad-35be-5f56-a8ff-afceeeaa6101}
  51. WT_SESSION=2ef0c529-ef53-42bf-aff2-2355697f57fa

set 后跟上环境变量名,可以只查看指定环境变量:

  1. C:\WINDOWS\system32>set path
  2. Path=C:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Program Files (x86)\NetSarang\Xshell 7\;C:\ProgramData\Miniconda3;C:\ProgramData\Miniconda3\Library\mingw-w64\bin;C:\ProgramData\Miniconda3\Library\usr\bin;C:\ProgramData\Miniconda3\Library\bin;C:\ProgramData\Miniconda3\Scripts;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\Git\cmd;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\quanzaiyu\AppData\Local\Microsoft\WindowsApps;C:\Users\quanzaiyu\AppData\Roaming\npm;C:\Users\quanzaiyu\AppData\Local\Yarn\bin;C:\Users\quanzaiyu\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\Bandizip\;D:\Program Files\gradle\gradle-6.3\bin;D:\Program Files\openjdk\jdk-15\bin;D:\Program Files\android-sdk\tools;D:\Program Files\android-sdk\platform-tools;D:\Program Files\maven\apache-maven-3.6.0\bin
  3. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

三、设置环境变量

可视化设置环境变量

直接在 控制面板\系统和安全\系统\高级系统设置\高级\环境变量... 中设置即可。

使用命令临时设置环境变量

通过set命令,可以在CMD中设置环境变量:

  1. C:\WINDOWS\system32>set a=1
  2. C:\WINDOWS\system32>echo %a%
  3. 1

通过set对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。

使用命令永久设置环境变量

通过setx命令,可以在CMD中设置永久生效的环境变量:

  1. C:\WINDOWS\system32>SETX A 1
  2. 成功: 指定的值已得到保存。

关闭或重启计算机,会发现此环境变量仍然生效。

setx 变量名 值 设置的是当前用户可见的环境变量。

如果需要设置为系统环境变量,则可以使用 setx 变量名 值 /m

将某个环境变量设置为空

直接将空字符串赋值给环境变量即可:

  1. SETX A ""

使用set的话,可以什么都不传,或赋值一个空字符串:

  1. SET A=
  2. SET A=""

追加环境变量

在将需要附加的环境变量使用 %% 包住,赋值给自己即可:

  1. C:\WINDOWS\system32>SETX A %A%;2
  2. 成功: 指定的值已得到保存。
  3. C:\WINDOWS\system32>echo %A%
  4. 1;2
  5. C:\WINDOWS\system32>set A=%A%;3
  6. C:\WINDOWS\system32>echo %A%
  7. 1;2;3

这种方式可以很方便地为 PATH 追加内容。

四、常用的环境变量

名称 描述 举例 作用范围
%UserProfile% 当前用户的配置文件的位置。 C:\Users\quanzaiyu 局部
%AllUsersProfile% 所有“用户配置文件”的位置。 C:\ProgramData 局部
%AppData% 应用数据存储路径(漫游) C:\Users\quanzaiyu\AppData\Roaming 局部
%LocalAppData% 应用数据存储路径(本地) C:\Users\quanzaiyu\AppData\Local
%SystemRoot% 返回 Windows 系统根目录的位置。 C:\WINDOWS 系统
%WinDir% 返回操作系统目录的位置。 C:\WINDOWS 系统
%CD% 返回当前目录字符串 局部
%UserName% 返回当前登录的用户的名称。 quanzaiyu 局部
%CMDCMDLINE% 返回用来启动当前的 Cmd.exe 的准确命令行。 cmd.exe 局部
%CMDEXTVERSION% 返回当前的“命令处理程序扩展”的版本号。 2 系统
%COMPUTERNAME% 返回计算机的名称。 DESKTOP-T1071CD 系统
%COMSPEC% 返回命令行解释器可执行程序的准确路径。 C:\WINDOWS\system32\cmd.exe 系统
%DATE% 返回当前日期。使用与 date /t 命令相同的格式。 2020/09/28 周一 系统
%ERRORLEVEL% 返回最近使用过的命令的错误代码。通常用非零值表示错误。 0 系统
%HOMEDRIVE% 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 C: 系统
%HOMEPATH% 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 \Users\quanzaiyu 系统
%HOMESHARE% 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 系统
%LOGONSEVER% 返回验证当前登录会话的域控制器的名称。 局部
%NUMBER_OF_PROCESSORS% 指定安装在计算机上的处理器的数目。 12 系统
%OS% 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。 Windows_NT 系统
%PATH% 指定可执行文件的搜索路径。 C:\Program Files (x86)\VMware\VMware Workstation\bin\;… 系统
%PATHEXT% 返回操作系统认为可执行的文件扩展名的列表。 .COM;.EXE;.BAT;.CMD;.VBS;… 系统
%PROCESSOR_ARCHITECTURE% 返回处理器的芯片体系结构。值: x86,IA64。 AMD64 系统
%PROCESSOR_IDENTFIER% 返回处理器说明。 系统
%PROCESSOR_LEVEL% 返回计算机上安装的处理器的型号。 6 系统
%PROCESSOR_REVISION% 返回处理器修订号的系统变量。 9e0a 系统
%PROMPT% 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 $P$G 局部
%RANDOM% 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 3512 系统
%SYSTEMDRIVE% 返回包含 Windows XP 根目录(即系统根目录)的驱动器。 C: 系统
%TEMP% and %TMP% 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。 C:\Users\QUANZA~1\AppData\Local\Temp 系统和用户
%TIME% 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。 17:25:07.42 系统
%USERDOMAIN% 返回包含用户帐户的域的名称。 DESKTOP-T1071CD 局部

五、环境变量在注册表中的位置

其实所有的环境变量都是存放于注册表中的,其中:

  • 用户环境变量存放于 HKEY_CURRENT_USER\Environment
  • 系统环境变量存放于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

image.png
这样,就可以很轻松地导出环境变量了,以便重装系统快速恢复。