原文链接:http://www.juzicode.com/computer-basis-path-cmd-search-path/
孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!…… Windows命令行启动有四种方法 ,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。
1、环境变量PATH
环境变量是Windows系统下一组非常重要的变量值,其中的PATH变量告诉操作系统默认的搜索路径,比如要运行某个可执行文件,如果在当前工作目录没有找到,就会到PATH变量指明的路径下逐步搜索;又比如运行可执行文件需要加载DLL文件时,也会在PATH变量指明的路径下搜索。
可以通过“此电脑–右键属性–高级系统设置–系统属性–高级–环境变量”查看环境变量中系统PATH和用户PATH的值 ,PATH值是由分号“;”间隔的多个路径。


也可以在命令行下输入”echo %PATH%” 查看环系统PATH的值:

因为启动cmd命令行时会自动加载环境变量的值,如果环境变量做了修改,必须重启cmd命令行才能生效。
2、命令行启动方法
茴香豆的茴字有四种写法,桔子菌不在这里卖弄下命令行的几种启动方式,也会“显出极惋惜的样子”。
茴字写法1、键盘按下徽标+R,弹出运行窗口输入cmd启动命令行,进入的当前工作目录就是当前用户目录。


茴字写法2、 在文件管理器的地址栏输入cmd后回车运行命令行,当前工作目录是文件管理器所在的当前目录。


茴字写法3、 新建一个文件.txt,文件内容输入“cmd“,文件后缀改名为.bat或者.cmd,将该文件放置到需要的目录下,启动后会切换到该目录为当前工作目录。


茴字写法4、 在已打开命令行里输入start,重开一个新的命令行,新开命令行的当前工作目录和之前打开的当前工作目录一样。需要注意的是环境变量的值也会从启动窗口继承,所以即使在修改过环境变量后用start方式启动新的命令行窗口,新的环境变量并不会自动生效。

3、可执行文件查找顺序
在Windows下运行某个可执行文件,如果不指定可执行文件的路径,系统会按照什么顺序来查找可执行文件呢?下面我们通过实验找出系统搜索文件顺序的规律:
step1、在E:\juzicode\findexe\目录创建work,sys,user等3个文件夹。

step2、编写下面一段程序,修改第7行的内容生成3个同名的juzicode.exe文件,他们不同的地方在于运行后会打印输出不同的内容,从而能区分系统找到的是哪个路径下的可执行文件。

生成的可执行文件分别对应放置在3个路径下:

step3、在环境变量页添加E:\juzicode\findexe\sys到环境变量系统PATH,添加E:\juzicode\findexe\user到环境变量用户PATH。

有了前面的准备工作,接下来我们一步步改名或删除3个路径下的这个可执行文件看看结果如何。
step4、在E:\juzicode\findexe\work目录下启动cmd,输入“juzicode.exe”运行可执行文件,从这次运行输出的打印内容可以看到运行的是当前工作目录下的juzicode.exe。

step5、接下来删除或改名当前工作目录work路径下的juzicode.exe,再次执行juzicode.exe文件,从打印内容可以看出此次运行的是系统PATH目录下的可执行文件。

step6、接下来删除或改名环境变量系统PATH指定的 sys 目录下juzicode.exe,再次执行juzicode.exe文件,从打印内容可以看出此次运行的是用户PATH目录下的可执行文件。

再次删除或改名环境变量用户PATH指定的user路径下的juzicode.exe文件,再次执行的时候就提示找不到改命令或文件了。

- 从前面的实验可以看出,可执行文件是依次按照下面3个顺序来查找的:
- 1.从当前工作目录查找。
- 2.环境变量系统PATH。
- 3.环境变量用户PATH。
另外如果PATH变量中多个路径下都有某个相同命名的可执行文件,从前往后找时找到第一个就会停止。系统查找可执行文件的顺序,在加载DLL动态库文件时同样适用。