批处理自动设置JAVA环境变量报错求教

枕戈待旦勇往直前 2013-06-27 11:57:15
写了一个很简单的一个脚本,用于自动设置环境变量。参照脚本网址为:http://www.cnblogs.com/madgoat/articles/1087038.html,代码如下:
@echo 你提供的jdk安装目录为:%1

@echo off

IF EXIST %1\bin\java.exe (

rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量

@setx JAVA_HOME %1

@setx path %JAVA_HOME%\bin;%path%

@setx classpath %classpath%;.

@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar

@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar

@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar

@echo on

@echo Java 2 SDK 环境参数设置完毕,正常退出。

) ELSE (

IF %1=="" (

rem 如没有提供安装目录,提示之后退出

@echo on

@echo 没有提供 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

) ELSE (

rem 如果提供非空的安装目录但没有bin\java.exe,则指定的目录为错误的目录

@echo on

@echo 非法的 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

)

)

我的jdk安装地址为:C:\Program Files\Java\jdk1.6.0_26,所以将脚本改为
@echo jdk安装目录为:C:\Program Files\Java\jdk1.6.0_26

@echo off

IF EXIST C:\Program Files\Java\jdk1.6.0_26\bin\java.exe (

rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量

@setx JAVA_HOME C:\Program Files\Java\jdk1.6.0_26

@setx path %JAVA_HOME%\bin;%path%

@setx classpath %classpath%;.

@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar

@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar

@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar

@echo on

@echo Java 2 SDK 环境参数设置完毕,正常退出。

) ELSE (

IF C:\Program Files\Java\jdk1.6.0_26=="" (

rem 如没有提供安装目录,提示之后退出

@echo on

@echo 没有提供 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

) ELSE (

rem 如果提供非空的安装目录但没有bin\java.exe,则指定的目录为错误的目录

@echo on

@echo 非法的 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

)

)

命名为Env.bat将其置于C盘要目录下,在命令行中调用及结果显示如图:

显示错误有:
1、无效语法。默认选项不允许超过‘2’次
2、最下面 “此时不应有Files\Java\jdk1.6.0_26=="" ”
这两点怎么解释
执行过后 环境变量面板的用户变量增加了 classpath 值为 ;\jre\lib\rt.jar
但 JAVA_HOME(值为C:\Program Files\Java\jdk1.6.0_26)和classpath(值为 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tool.jar;)都应在系统变量里。

...全文
456 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2013-07-04
  • 打赏
  • 举报
回复
引用 9 楼 fengsuiyingdong 的回复:
以这种方式即可,不过它也不能将%Java_Home%写进去,比如%Java_Home%\bin 写到path里是 C:\Program Files\Java\jdk1.6.0_26\bin
这样不就是证明已经将%Java_Home%写进去了嘛
  • 打赏
  • 举报
回复
@echo off
title Set  Java environment variables
@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

\Environment" /v Java_Home /t reg_sz /d "%cd%" /f

@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

\Environment" /v ClassPath /t reg_expand_sz /d ".;%Java_Home%\lib\dt.jar;%Java_Home%

\lib\tools.jar;%Java_Home%\jre\lib\rt.jar" /f

@reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

\Environment" /v path /t reg_expand_sz /d ".;%path%;%Java_Home%\bin" /f

set /p tmp=Successfully, esc......
pause>nul
以这种方式即可,不过它也不能将%Java_Home%写进去,比如%Java_Home%\bin 写到path里是 C:\Program Files\Java\jdk1.6.0_26\bin 注意事项有: 1、ClassPath(第二条)与path(第三条)的顺序不能更改(测试得出来) 2、该批处理应该放到JDK的安装目录里,因为"%cd%"获取的是当前的路径
dracularking 2013-06-28
  • 打赏
  • 举报
回复
引用 7 楼 fengsuiyingdong 的回复:
建议你一句句手动执行,按句检查执行效果
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复

@echo jdk安装目录为:C:\Program Files\Java\jdk1.6.0_26
 
@echo off
 
IF EXIST C:\Program Files\Java\jdk1.6.0_26\bin\java.exe (
 
   rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量
 
   @setx JAVA_HOME "C:\Program Files\Java\jdk1.6.0_26"
 
   @setx path "%JAVA_HOME%\bin;%path%"
 
   @setx classpath ".;%classpath%"
 
   @setx classpath "%classpath%;%JAVA_HOME%\lib\tools.jar"
 
   @setx classpath "%classpath%;%JAVA_HOME%\lib\dt.jar"
 
   @setx classpath "%classpath%;%JAVA_HOME%\jre\lib\rt.jar"
 
   @echo on
 
   @echo Java 2 SDK 环境参数设置完毕,正常退出。
 
)  ELSE (
 
      IF C:\Program Files\Java\jdk1.6.0_26=="" (
 
      rem 如没有提供安装目录,提示之后退出
 
      @echo on
 
      @echo 没有提供 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置

。
 
      ) ELSE (
 
        rem 如果提供非空的安装目录但没有bin\java.exe,则指定的目录为错误的目

录
 
        @echo on
 
        @echo 非法的 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置

。
 
      )
 
)
setx 第二个参数加引号
  • 打赏
  • 举报
回复
引用 5 楼 fengsuiyingdong 的回复:
现在代码仅保留
@echo jdk安装目录为:C:\Program Files\Java\jdk1.6.0_26

@echo on

IF EXIST C:\Program Files\Java\jdk1.6.0_26\bin\java.exe (

   rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量

   @setx JAVA_HOME "C:\Program Files\Java\jdk1.6.0_26"

   @setx path "%JAVA_HOME%\bin;%path%"

   @setx classpath ".;%classpath%"

   @setx classpath "%classpath%;%JAVA_HOME%\lib\tools.jar"

   @setx classpath "%classpath%;%JAVA_HOME%\lib\dt.jar"

   @setx classpath "%classpath%;%JAVA_HOME%\jre\lib\rt.jar"

   @echo on

   @echo Java 2 SDK 环境参数设置完毕,正常退出。

)
测试后如图 问题是: 1、环境变量里 JAVA_HOME的值设置正确,但是以下几句脚本提示成功,
@setx path "%JAVA_HOME%\bin;%path%"

   @setx classpath ".;%classpath%"

   @setx classpath "%classpath%;%JAVA_HOME%\lib\tools.jar"

   @setx classpath "%classpath%;%JAVA_HOME%\lib\dt.jar"

   @setx classpath "%classpath%;%JAVA_HOME%\jre\lib\rt.jar"
但是path和classpath的值设置错误(如上图),这是什么原因?
是的
dracularking 2013-06-27
  • 打赏
  • 举报
回复
看上去这些 %classpath% %JAVA_HOME% 都没读出值
  • 打赏
  • 举报
回复
现在代码仅保留
@echo jdk安装目录为:C:\Program Files\Java\jdk1.6.0_26

@echo on

IF EXIST C:\Program Files\Java\jdk1.6.0_26\bin\java.exe (

rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量

@setx JAVA_HOME "C:\Program Files\Java\jdk1.6.0_26"

@setx path "%JAVA_HOME%\bin;%path%"

@setx classpath ".;%classpath%"

@setx classpath "%classpath%;%JAVA_HOME%\lib\tools.jar"

@setx classpath "%classpath%;%JAVA_HOME%\lib\dt.jar"

@setx classpath "%classpath%;%JAVA_HOME%\jre\lib\rt.jar"

@echo on

@echo Java 2 SDK 环境参数设置完毕,正常退出。

)

测试后如图

问题是:
1、环境变量里 JAVA_HOME的值设置正确,但是以下几句脚本提示成功,
@setx path "%JAVA_HOME%\bin;%path%"

@setx classpath ".;%classpath%"

@setx classpath "%classpath%;%JAVA_HOME%\lib\tools.jar"

@setx classpath "%classpath%;%JAVA_HOME%\lib\dt.jar"

@setx classpath "%classpath%;%JAVA_HOME%\jre\lib\rt.jar"

但是path和classpath的值设置错误(如上图),这是什么原因?
  • 打赏
  • 举报
回复
引用 2 楼 dracularking 的回复:
IF C:\Program Files\Java\jdk1.6.0_26=="" 这种写法也有问题,这是在判断什么呢?应该还是用exist
是的。但用 IF NOT EXIST C:\Program Files\Java\jdk1.6.0_26 ( 也有问题
  • 打赏
  • 举报
回复
谢谢oh_Maxy,是有这个问题。
dracularking 2013-06-27
  • 打赏
  • 举报
回复
IF C:\Program Files\Java\jdk1.6.0_26=="" 这种写法也有问题,这是在判断什么呢?应该还是用exist

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧