如何自动安装与查找Java vm有关的程序?

时间:2016-09-18 04:04:56

标签: cmd path

在Windows 8.1上,我正在安装一个查找Java vm位置的程序。

手动设置的环境变量运行时没有任何问题:

JAVA_HOME="C:\Program Files (x86)\Java\jre1.8.0_102"
PATH=%JAVA_HOME%\bin

它不会与此一起运行:

JAVA_HOME="C:\Program Files (x86)\Java\jre1.8.0_102"
PATH=%JAVA_HOME%\bin;%PATH%

我在上面写的%PATH%表示用分号等分隔的所有其他必要系统路径。

PATH是单个目录条目时,程序只能找到jvm。

我尝试从批处理文件运行程序并暂时更改PATH。我知道临时更改仅在命令屏幕打开时才存在。

这是我的批处理文件:

set PATH=%JAVA_HOME%\bin
start Epson_JavaPOS_1.1.4 blah blah.exe
cmd /K

问题是我认为在程序安装开始并检测到用户输入时,不会保留临时值。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

请阅读

上的答案

解释为什么set variable="string with space"通常不太好,因为变量值 ,双引号接下来与另一个字符串连接。

有问题的第一个脚本代码会在PATH变量的扩展时生成,其值为:

"C:\Program Files (x86)\Java\jre1.8.0_102"\bin

这绝对不对。

但它甚至没有产生这个字符串,因为两行中也缺少命令set。因此,Windows命令处理器在执行第一行时输出错误消息,因为它无法找到名为JAVA_HOME的应用程序,脚本或内部命令。第二行不会导致错误消息,因为命令 PATH 导致本地环境变量PATH被重新定义为值\bin

使用此代码追加 Java 主目录的路径PATH

set "JAVA_HOME=%ProgramFiles(x86)%\Java\jre1.8.0_102"
if "%PATH:~-1%" == ";" (
    set "PATH=%PATH%%JAVA_HOME%\bin"
) else (
    set "PATH=%PATH%;%JAVA_HOME%\bin"
)

使用此代码 prepend Java 主目录的路径到PATH

set "JAVA_HOME=%ProgramFiles(x86)%\Java\jre1.8.0_102"
set "PATH=%JAVA_HOME%\bin;%PATH%"

即使目录路径包含1个或多个空格或括号,环境变量PATH的字符串值中的分号分隔的目录路径也不会被双引号。

只有一个例外,必须使用双引号将目录路径添加到PATH:目录路径包含1个或更多分号。

在命令提示符窗口set /?help set中运行,以获取有关命令 SET 的帮助。

答案 1 :(得分:0)

@Mofi - 我发现您的信息非常有用,因此引导我朝着正确的方向前进。以下是我如何自动安装无法找到Java vm的程序的问题的解决方案......

  1. 完全删除此环境变量 - JAVA_HOME
  2. 编辑PATH环境变量 - 删除%JAVA_HOME%\ bin
  3. 修改批处理脚本
  4. 当jvm路径附加到%PATH%而不是PREPENDED时,程序会找到jvm。

    批量脚本修正:

    示例1

    setx JAVA_HOME "%ProgramFiles(x86)%\Java\jre1.8.0_102"
    setx PATH "%JAVA_HOME%\bin"
    start Epson_JavaPOS_ADK_1141.exe
    cmd /K          
    

    或者这个(正如Mofi建议的那样)

    示例2

    set "JAVA_HOME=%ProgramFiles(x86)%\Java\jre1.8.0_102"
    if "%PATH:~-1%" == ";" (
        set "PATH=%PATH%%JAVA_HOME%\bin"
    ) else (
        set "PATH=%PATH%;%JAVA_HOME%\bin"
    )
    start Epson_JavaPOS_ADK_1141.exe
    cmd /K
    

    在示例2中,%JAVA_HOME%\ bin附加到PATH变量两次。

    在示例1中:

    这一行:

     setx JAVA_HOME "%ProgramFiles(x86)%\Java\jre1.8.0_102"
    

    创建一个覆盖任何系统变量的User变量。(在我的情况下,没有)

    这一行:

    setx PATH "%JAVA_HOME%\bin"
    

    创建一个附加到PATH系统变量的User变量。