返回列表 发帖

使用批处理设置JAVA环境变量

首先要找到JDK安装路径

本批处理程序首先假定用户是按照默认路径安装JAVA的(JAVA默认安装路径是"C:\Program Files\Java\jdk×××",最后面的×××表示JDK的版本,如我电脑上是jdk1.6.0_12),故设置一个变量JavaPath="C:\Program Files\Java",然后判断该路径是否存在,如果不存在就设置JavaPath="D:\Program Files\Java"(考虑到用户改变路径时最常做的操作时把要安装的程序放在D盘),然后模糊搜索JavaPath找到下面以JDK开头的文件夹,找到后判断我们要加入系统环境变量中的目录及文件是否都存在,若不存在则提示用户输入JDK安装路径,若存在则进入下一步设置JAVA环境变量。

设置JAVA环境变量

一开始想通过执行类似"set path=%path%;JDKPath"的方法设置JAVA环境变量,但用这种方法设置的环境变量只对当前cmd窗口有效(在开始运行中输入cmd进入dos窗口时,只是获取到当前系统环境变量的副本,故用此法修改时只是修改了副本中的环境变量,当窗口关闭时就失效了)。考虑到要使设置好的环境变量持久有效,就想到要采用修改系统注册表的方法,于是先找到系统环境变量对应的注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Environment,然后采用命令REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]分别将JAVA_HOME,Path,ClassPath加入到系统环境变量中,如:reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Environment" /v JAVA_HOME /t REG_SZ /d "%JDKPath%" /f 是将JAVA_HOME加入到环境变量中。

注意:(1)在加入Path时要把对应值设为\d "%PATH%;%%JAVA_HOME%%\bin"而不能是\d " %JAVA_HOME%%\bin",否则会把原来系统中的Path变量清空。

        (2)在加入Path和ClassPath时要将类型设置为/t REG_EXPAND_SZ,而不是/t REG_SZ,否则系统不会将对应值中的%JAVA_HOME%替换为该变量实际的路径。


使设置的环境变量立即生效

按照上面的方法设置的环境变量,需要用户重启电脑或再右击"我的电脑"->属性->高级->环境变量,打开环境变量窗口后再单击下确定后才能生效。想到出现这种情况可能是因为批处理修改注册表后系统没有及时刷新引起的,于是找到下面刷新系统设置的命令

taskkill /f /im explorer.exe

start explorer.exe

RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters

执行后,上面设置的环境变量立即生效。

欢迎光临:逐梦论坛

使用批处理文件设置环境变量

在开发时一般使用环境变量而不用相对路径来包含第三方库,其原因在这篇文章详述:为何用环境变量而不用相对路径来包含第三方库。但是手动添加环境变量是一件繁琐的事情。我决心使用批处理文件来解决这个问题。我思考:要实现批处理添加环境,主要是解决两个问题,一是一般DOS命令设置环境变量只对当前的控制台有效,必须实现添加这个环境变量是长期有效的,而不能退出当前控制台就无效的;二是因为每个人放置的源码路径不一样,因此设置的环境变量指向一个绝对路径是不行的,必须指向相对于批处理文件所在的路径。
       上网搜索了一下,找到了相应的批处理命令,稍加组合实现了这个功能,示例如下:
  1. @echo off

  2. :: 设置第三方库环境变量THIRD_PARTY
  3. wmic ENVIRONMENT create name="THIRD_PARTY",username="<system>",VariableValue="%~dp0ThirdPartyLib"
  4. echo %THIRD_PARTY%

  5. :: 设置SDK环境变量PIE_SDK_INC和PIE_SDK_LIB
  6. wmic ENVIRONMENT create name="PIE_SDK_INC",username="<system>",VariableValue="%~dp0"
  7. echo %PIE_SDK_INC%

  8. wmic ENVIRONMENT create name="PIE_SDK_LIB",username="<system>",VariableValue="%~dp0outdir"
  9. echo %PIE_SDK_LIB%

  10. pause
复制代码
稍微解释下这个命令:
        THIRD_PARTY为环境变量名,<system>表示你添加的是系统环境变量,%~dp0表示批处理文件所在的文件夹,例如,你的bat文件在e:/MyProject/test.bat,则%0就是%~dp0是e:/MyProject/,%~dp0ThirdPartyLib就是e:/MyProject/ThirdPartyLib。
        ok,现在你可以建这样一个批处理文件,然后别人可以轻松双击它就设置好环境变量了。

参考:
1. 怎样让再MS-DOS设置的环境变量永久生效?
2. 获取批处理文件所在路径

永久修改path变量
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;your path;"
欢迎光临:逐梦论坛

TOP

批处理设置环境变量

临时性修改环境变量只需在命令行运行
set classpath =路径
要永久修改环境变量需在注册表修改
批处理的话命令如下:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
" /v Java_Home /t reg_sz /d "路径" /f

导出环境变量到env.reg
reg export "hklm\system\currentcontrolset\control\session manager\environment" env.reg

显示注册表系统环境变量:
reg query "hklm\system\currentcontrolset\control\session manager\environment"

使用VBS
dim wsh
Set wsh = WScript.CreateObject("WScript.Shell")
wsh.Environment("system").Item("<变量名>")="<值>"

或使用使用REG
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
::系统环境变量
::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
::用户环境变量
::HKEY_CURRENT_USER\Environment
reg add "%regpath%" /v "<name>" /d "<data>"
欢迎光临:逐梦论坛

TOP

返回列表

Powered by Discuz! 7.2   论坛QQ群:逐梦论坛群

© 2001-2021 Comsenz Inc. 鲁公网安备 37120302000001号