Windows系统环境变量path详解

大家平时有没有编辑好path变量,可是运行结果却不尽人意的情况,那么希望看完我这篇关于path变量的文章对大家有所帮助,在文章的结尾有参考文档和笔者之前踩过的坑。

语法

在Microsoft官方的文档中,环境变量path的定义和注解是这样子的:

path [[:][;…][;%PATH%]]
path ;

参数和符号的解释如下:

参数 说明
[:] 指定在命令路径中设置的驱动器和目录。 始终在命令路径中指定的目录之前搜索当前目录。
; 分隔命令路径中的目录。 如果不带其他参数使用,则 ; 从 PATH 环境变量中清除现有命令路径,Cmd.exe仅在当前目录中搜索。
%PATH% 将命令路径追加到 PATH 环境变量中列出的现有目录集。 如果包含此参数,Cmd.exe PATH 环境变量中的命令路径值替换它,无需在命令提示符下手动输入这些值。
/? 在命令提示符下显示帮助。

这些符号对应我们自己电脑中的变量是什么样的呢?

以我自己的电脑举例:

  • [:] 对应的是windows系统设定的盘符

  • path 对应的则是盘符下的路径;

如E:\java11\jdk11\bin中 [:]就是对应的E:,而path对应的就是java11\jdk11\bin。

  • “;”封号的作用,在这个文档中描述的不够清晰,我以我的电脑来描述一下它的作用

    1. 没有其他的参数时

      在命令行下运行Tomcat启动文件startup.bat,命令行找不到文件。当我们去除%CATALINA_HOME%\bin中的“;”执行结果却不一样。

这是因为在path环境变量下,检索的顺序不一样。这个留到后面说。

​ 2.有其他参数时

​ 在Microsoft官方文档里,给我们的例子是

​ path c:\user\taxes;b:\user\invest;b:\bin

​ 表示在路径 c:\user\taxesb:\user\investb:\bin 中搜索外部命令。

​ 在我们的一般配置的环境变量中,比如配置java的jdk和jre环境,就有用到这个;

  • ​ %PATH%的作用说白了就像C中被define定义的常量,java中被final修饰的最终值,只是起到一个替换名字的效果。
  • ​ /?的效果如图

path的优先级

  • 上文我们说了Microsoft官方定义的文档,同时还留了一个问题;上述的“”的两种情况,在没有参数的时候,加不加封号直接影响到执行的结果,这就涉及到path的优先级问题。

    我们首先来了path的原理和作用

    • 当我们想要去寻找一个可执行的文件或者外部命令时,系统首先会在当前根目录下去检索寻找,比如我们现在处于“C:\”下,那么当我们键入一个文件时,系统会先在当前的C盘下寻找,如果找不到时,就需要去系统path变量下遍历寻找,如果还是找不到就会去用户path变量下遍历寻找;==但是还是会出现明明定义了path变量或者定义了多个变量但是出现与期望不一样的结果。==这就需要去了解path变量内部遍历顺序。

    path变量遍历顺序

    • 一般来说,path变量遍历顺序时从上到下遍历的,但是有个例外,就是变量中结尾有“;”时,如上文说的,当“;”没有和其他参数搭配使用时,系统会从 PATH 环境变量中清除现有命令路径。所以检索时系统会把带有“;”的变量放在最后遍历,当有多个带有封号的变量时,系统会将这些变量放在其他变量遍历完后遍历,顺序依然时从上至下,这也是上述问题的原因。

      • 在%CATALINA_HOME%\bin;变量前放有%MAVEN_HOME%\bin;,

**可是真实的执行顺序是这样吗,检索碰到第一个“;”时,就不会检索了,所以相当于只会检索到%MAVEN_HOME%\bin就会停止,这就是为什么当我们执行Tomat启动文件startup.bat反馈找不到文件的原因。**而当去掉封号后,startup.bat能够顺利执行,是因为,去掉封号后检索的顺序提前到之前去了,系统自然能够在遇到“;”前检索到。

编辑path的注意事项

  1. 封号不要随便打,封号过多很有可能导致,找不到指定文件。执行顺序我们是不可改变的,但是我们编辑的习惯可以改变。
  2. 面对多个相同文件名不同版本的文件,比如jdk;想要随意切换版本,除了做好文件管理外,我们剩下的就是要注意优先级,我们可以通过将想要的版本的变量上移,来达到优先于其他版本检索到目的。
  3. 现在的许多新版本软件在下载.exe或.iml安装版本时,都会自动配置path变量,比如新版的jdk工具安装时就会在path中配置一个默认的变量,我们需要去管理,而不是放任不管。
  4. path变量有时候不能如列表打开,这时候我们需要将首个变量修改为盘符开头格式。

这些注意事项都是笔者曾经踩过的path变量的坑,希望看完文档后对大家有所帮助。

  • **参考文档:微软官方文档**path | Microsoft Learn

learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/path#remarks)

​ 万一大家有觉得不够清晰的地方,大家可以去参考这个文档。

Windows系统环境变量path详解相关推荐

  1. Win10配置环境变量path详解

    一. 配置环境变量的目的 在刚刚写的代码中,只能存放在bin目录下,才能使用 javac 和 java 工具.如果我想把代码存放在任意的目录下,在任意的目录下都可以使用javac 和 java 工具该 ...

  2. windows上安装python3教程以及环境变量配置详解

    这篇文章主要介绍了windows上安装python3教程以及环境变量配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.在浏览器搜索pyth ...

  3. Windows WMIC命令使用详解

    Windows WMIC命令使用详解 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在WMIC命令行提示符上,命令以交互的方式执行. 执行"w ...

  4. C# Windows 窗体编程入门详解

    C# Windows 窗体编程入门详解 基于Web的B/S架构应用程序近年来确实非常流行,B/S易于部署.易于维护的特点使Web应用程序开发得到了前所未有的发展.但是,Web应用程序的缺点是,它们有时 ...

  5. Windows系统环境变量大全(XP/Win7/Win8)

    很多时候,不管我们在XP下还是在Vista.Win7.Win8下,不管我们是程序员还是普通用户,我们都可能会用到Windows系统环境变量. 可能有些初级用户比较迷惑,这个,对我们有什么用?该怎么用? ...

  6. Java开发环境变量配置【java1.8安装及环境变量详细配置】【JAVA_HOME系统变量、CLASSPATH系统变量、系统环境变量Path】

    jdk1.8.0_201--百度网盘下载:[链接:https://pan.baidu.com/s/1osRsn8D2iMdq_qton0LXrw 提取码:zjxs] 目   录 jdk安装步骤截图 复 ...

  7. 15、Windows驱动开发技术详解笔记(11) 基本概念

    9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...

  8. 《Windows驱动开发技术详解》学习笔记

    Abstract   如果推荐 Windows 驱动开发的入门书,我强烈推荐<Windows驱动开发技术详解>.但是由于成书的时间较早,该书中提到的很多工具和环境都已不可用或找不到,而本文 ...

  9. windows USB读卡器驱动详解

    目标 在windows 2000及以上版本的操作系统中,开发usb读卡器驱动.实现数据批量传输功能,同时需要根据特定的协议(协议可自定义)进行通信.实现一个基于此usb驱动的动态库(统一接口),供上层 ...

最新文章

  1. kubernetes集群搭建以及遇到的问题
  2. java强制转换_java强制类型转换
  3. LeetCode 1150. 检查一个数是否在数组中占绝大多数(二分查找)
  4. cmd测试cuda安装_安装:anaconda+cuda+pytorch+pycharm
  5. 【NOI2002】银河英雄传说
  6. 关于 Java 数组的 12 个最佳方法
  7. Linux启动分析——init进程与app启动(init进程源码分析)
  8. pytorch实现resnet50
  9. 有关“重要极限”的经典例题
  10. Kent Beck : 领导的敏捷潮
  11. 两轮车ECU的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. zz很有用的生活小窍门
  13. element UI select下拉选项位置问题
  14. python二级练习和考试复习(分别格式化输出0.002178对应的科学表示法形式)
  15. 今天我们怎样学软件技术,怎样教软件课程?
  16. mybatis plus中的${ew.sqlSegment},${ew.sqlSelect},${ew.customSqlSegment},${ew.sqlSet}使用
  17. 基于蚁群算法的六轴机械臂路径规划(运动学模型建立)
  18. ST-LINK/V2烧录AT32芯片方法
  19. YYCMS搭建影视网站教程
  20. 二分搜索树--二叉树

热门文章

  1. 常用省市二级目录JSON模板
  2. java 哈希碰撞攻击_php中的哈希碰撞以及防御
  3. 无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
  4. 电影《后会无期》经典台词(英文版)
  5. 范式的判断:方法+例题
  6. 大数据和云计算技术周报(第109期)
  7. 北京科技大学计算机学院研究生院,北京科技大学计算机与通信工程学院-殷绪成...
  8. adb inputswipe shell_android adb shell input各种妙用
  9. 新型消防机器人作文_未来的消防机器人作文700字
  10. python栅格地图上路径规划作图