Windows系统中path环境变量详解
在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH。正确地配置这些环境变量,是能够顺利学习、开发的前提。⽽经常出现的问题是:有的学习者能够按照提⽰⼀步⼀步地正确配置,但时间⼀长就忘了,出现了问题也⽆从下⼿。究其原因,就是对这些概念没有理解,知其然但不知其所以然。下⾯的内容,就是帮助⼤家知其所以然。
⼀、基本原理
⾸先看PATH环境变量。
JAVA的初学者,必须要学会配置PATH环境变量,否则⽆法编译、运⾏JAVA程序。那么,为什么要配置PATH环境变量呢?PATH环境变量是做什么的呢?我们从⼀个常见的问题⼊⼿。
当我们安装好JAVA后,若没有正确配置PATH环境变量,则在命令⾏窗⼝(开始->;运⾏->;输⼊cmd,回车)下运⾏命令java -version(显⽰JAVA的版本)命令时,会出现如下的错误提⽰信息:
图⼀
这条错误信息的意思是,你要求运⾏的“java”这条命令我不认识,不知道是个什么玩意⼉。那么究竟这个
“java”命令是何⽅神圣呢?在JDK 的安装⽬录下(我的是D:\Java\jdk1.6.0_24),有⼀个bin⽬录。打开此⽬录,会发现⼤量的可执⾏⽂件(后缀名为exe的⽂件。Windows默认隐藏⽂件后缀名。要显⽰后缀名,可在当前窗⼝上⽅菜单栏⾥点“⼯具”菜单->⽂件夹选项->;查看->⾼级设置->;清除“隐藏已知⽂件类型的扩展名”前⾯的钩钩->;确定)。其中有⼀个可执⾏⽂件即为。现在在命令⾏窗⼝下把当前⽬录切换到这个bin⽬录下。通过如下命令实现:
图⼆
在此⽬录下,运⾏dir命令,显⽰当前⽬录下的所有⽂件和⽬录。从显⽰结果中,我们可以清楚地看到“”这个⽂件。如下图所⽰:
图三
实际上我们执⾏“java”命令,就是要运⾏“”这个可执⾏⽂件(我们运⾏其他命令,本质上也是要执⾏某个程序⽂件)。我们现在再来执⾏“java -version”这条命令试试。在命令⾏窗⼝下键⼊java -version,回车,结果如下图所⽰:
图四
看来这次执⾏成功了。命令结果显⽰当前JAVA的版本是“1.6.0_24”。执⾏java -?可查看此命令的帮助
信息。可以看到它有很多选项,-version只是其中之⼀。另外⼀种⽅式是,写出这些可执⾏⽂件的完整(绝对)路径(例如:d:\Java\jdk1.6.0_24\bin\java -version),就可以在任何⽬录下执⾏了。读者可⾃⾏尝试。
与java命令类似,javac命令⽬前也能在bin⽬录下执⾏,但到其他⽬录下就只能写出其完整路径了。在学习JAVA的过程中,我们经常需要使⽤javac和java这两条命令来编译、运⾏我们的JAVA程序。难道我们每次运⾏这两条命令都要先切换到bin⽬录下吗或写出⼀长串的绝对路径吗?能不能有⼀个办法,让我们能够在任何⽬录下都能⾃如地运⾏这些命令呢?
解决的办法就在于PATH环境变量。
PATH是路径的意思,PATH环境变量中存放的值,就是⼀连串的路径。不同的路径之间,⽤英⽂的分号(;)分隔开。系统执⾏⽤户命令时,若⽤户未给出绝对路径,则⾸先在当前⽬录下寻相应的可执⾏⽂件、批处理⽂件(另外⼀种可以执⾏的⽂件)等。若不到,再依次在PATH保存的这些路径中寻相应的可执⾏的程序⽂件。系统就以第⼀次到的为准;若搜寻完PATH保存的所有路径都未到,则会显⽰类似于图⼀的错误信息。
明⽩了这些,我们就把bin⽬录的完整路径添加到PATH中。在命令⾏窗⼝下,可使⽤set命令完成此类的任务。直接运⾏set,会显⽰系统当前所有环境变量的值,运⾏set /?,会显⽰关于此命令的帮助信
息。使⽤set命令设置环境变量值的格式为:set 环境变量名=环境变量值。我们可以使⽤命令set path=D:\Java\jdk1.6.0_24\bin将java等程序⽂件所在的⽬录添加到PATH环境变量中(Windows下环境变量名不区分⼤⼩写,这与UNIX不同)。但是这样会使PATH的值只有“D:\Java\jdk1.6.0_24\bin”,它预先设定供其他程序使⽤的值就都被覆盖了。因此,我们应该把值“D:\Java\jdk1.6.0_24\bin”追加到PATH中。为此,我们可以使⽤如下命令:
set path=%path%;D:\Java\jdk1.6.0_24\bin
把PATH放在两个百分号之间,指把PATH原有的值取出。其后的分号表⽰分隔不同的路径值,之后才是我们要添加的值。注意,请在英⽂输⼊法状态下使⽤此命令。现在我们转到任意⼀个⽬录下执⾏java -version命令试试。结果如下图所⽰:
图五
可见运⾏完全成功。
但是这种使⽤set命令的⽅式设置的环境变量只对当前命令⾏窗⼝有效。⼀旦关闭此窗⼝,再次运⾏另⼀个命令⾏窗⼝时,PATH环境变量还是原来的值。因此,我们必须在Windows下修改PATH环境变量。步骤如下:
右击桌⾯“我的电脑”图标->;属性->⾼级->;环境变量,就打开了了设置环境变量的对话框。上⾯部分是为某个⽤户设置。Windows设计为可多⽤户使⽤⼀台机器,每⼈⼀个账户。为某个账户设置的变量只对该⽤户有效。下⾯部分是设置系统变量,对系统中的每个⽤户有效。现在⼀般电脑都只有⼀个⽤户,即Administrator。因此只需要为此账户设置即可。到PATH环境变量,点“编辑”。在“变量值”框内现有值的后⾯输⼊英⽂输⼊法的分号,然后添加你想添加的值(在这⾥是D:\Java\jdk1.6.0_24\bin)。⼀路确定,OK!
现在再打开⼀个命令⾏窗⼝,输⼊echo %path%命令查看path的值(或者直接使⽤path命令亦可)。现在,我们可以看到bin⽬录已被添加到PATH中,再在任何⽬录下运⾏java -version命令,均可成功。如下图所⽰:
图六
其实我们执⾏其他命令都是这个原理。举例来说,当你显⽰PATH的值时,你会发现第⼀个值是C:\WINDOWS\system32。在Windows下打开这个⽬录,你会看到很多可执⾏⽂件,它们的名字与我们常⽤的命令的名字是⼀致的。也就是说,我们执⾏这些命令,实际上系统就是根据PATH的这个值到了相应的可执⾏⽂件,再运⾏这些⽂件的结果。如⽂件,它对应于attrib命令,这是显⽰/设置⽂件属性的命令,如下图所⽰:
图七
现在我们通过命令set path=(等号右边什么都没有,或随便写点东西)来清除PATH的值,再来运⾏attrib命令试试。如下图所⽰:
图⼋
可以看出,完全相同的命令,现在已⽆法执⾏⽽报错了。
下⾯再通过命令set path=c:\windows\system32(Windows下不区分⼤⼩写,因此windows与WINDOWS都正确),把⽂件所在的路径添加到PATH中,再运⾏试试。如下图所⽰:
图九环境变量path误删有影响吗
很显然,⽬前已能够正确运⾏。另外⼀个常见的例⼦就是format(⽂件是另⼀种可以执⾏的⽂件),不过此命令是⽤来格式化的,实验时请⼩⼼,不要由于失误⽽格式化了某个盘。⽽且,根据上⾯的描述,在PATH环境变量未正确配置的时候,写出这些⽂件的绝对路径(完整路径),亦可以正确执⾏。读者可⾃⾏实验(在此声明,由于已事先提醒,因此凡是由于误操作带来的数据丢失,概不负责!)。
⼆、内部命令、外部命令和批处理⽂件
我们现在启动⼀个命令⾏窗⼝,按上述的⽅法把PATH的值全部清除,然后再运⾏dir、cd等命令。出乎我们意料的是,它们仍然能够正确执⾏。这,⼜是什么原因呢?
我们来看看刚才那些报告错误的信息,它们都提到了“内部命令”和“外部命令”的概念。那么什么是内部命令和外部命令呢?
内部命令和外部命令是DOS(disk operating system,微软早期基于命令⾏的操作系统)时代的概念,百度百科的解释是:内部命令是随每次启动的COMMAND_COM装⼊并常驻内存,⽽外部命令是⼀条单独的可执⾏⽂件。粗略地讲,所谓内部命令就是最核⼼、使⽤最多的命令。为了提⾼响应速度,系统⼀启动,这些命令就被加载到内存,因此可以迅速、直接地执⾏;⽽外部命令由于使⽤相对较少,就不预先加载到内存,当⽤户使⽤时,再到硬盘上(c:\windows\system32)相应的可执⾏⽂件,然后加载到内存执⾏。像dir、cd等都是内部命令,⽽诸如attrib、format等都是外部命令。尽管DOS的时代早已成为了历史,但某些操作却必须在命令⾏模式下完成,对专业⼈⼠来说更是如此。因此,Windows产品⼀直保留着命令⾏模式这个⼯具。
另外⼀个概念就是批处理⽂件(后缀名为.bat,来源于批量的英语单词batch),它是另外⼀种可以执⾏的⽂件。简单地说,批处理⽂件包含了很多DOS命令。⽂件执⾏时,就⼀条⼀条地执⾏这些命令。不⼀定顺序执⾏,像通⽤的程序设计语⾔⼀样,它也有⾃⼰的流程控制。批处理⽂件创建很简单:⽤
任何⼀个⽂本编辑器(如Windows的记事本)创建⼀个⽂本⽂件,然后把后缀名改为.bat即可。创建好的批处理⽂件,你也可以⽤⽂本编辑器打开,查看它的“源代码”。
三、关于CATALINA_HOME环境变量的设置(适⽤于tomcat6/7)
Tomcat是⼀个免费开源的Servlet/JSP容器,深受⼴⼤JAVA初学者喜爱。这其中需要设置CATALINA_HOME环境变量,值为tomcat安装⽬录(我的是d:\tomcat7),否则会出现如下的错误信息:
图⼗
这句话的意思就是没有正确设置CATALINA_HOME环境变量,⽽此变量是运⾏Tomcat所必须的。⽽当你不理会这个信息,在命令⾏窗⼝把当前⽬录切换到tomcat安装⽬录下的bin⽬录下,再执⾏批处理⽂件startup.bat来启动tomcat时,发现也可以成功。难道现在不需要CATALINA_HOME环境变量了吗?
实际上,在startup.bat中,⾸先判断CATALINA_HOME是否为空。若为空,就把当前⽬录设为CATALINA_HOME的值。然后查CATALINA_HOME所指⽰的⽬录下是否有个bin⽬录,此bin⽬录下是否有个叫做catalina.bat的批处理⽂件(此⽂件负责启动tomcat)。若没有,则把当前⽬录的⽗⽬录设为CATALINA_HOME的值,再重复上述的查。若仍失败,就报图⼗所⽰的错误。因此,当你在to
mcat安装⽬录下的bin⽬录下运⾏startup.bat⽂件时,它就会按照上⾯所说的第⼆种⽅式⾃动正确设置CATALINA_HOME的值,因为catalina.bat⽂件就在tomcat安装⽬录下的bin⽬录⾥。
虽然在此种情况下能正确运⾏,但还是建议你正确设置CATALINA_HOME环境变量。与PATH不同的是,PATH系统本⾝就由,⽽CATALINA_HOME需要你⾃⼰“新建”,在“环境变量”窗⼝点“新建”即可。
为了能够在任何⽬录下都能运⾏tomcat安装⽬录下bin⽬录⾥的批处理⽂件,如startup.bat,可把此⽬录添加到PATH环境变量中(我的是d:\tomcat7\bin)。为了提⾼灵活性,可在PATH环境变量的最后添加上%catalina_home%\bin(与前⼀个值之间不要忘了⽤英⽂的分号隔开)。把catalina_home放置在两个百分号之间,表⽰引⽤这个环境变量的值。这样,当你把tomcat的安装⽬录换了以后,就只需要修改catalina_home的值,⽽不需要修改PATH的值了,因为它可以⾃动计算出新的正确值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。