在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
问题是我认为在程序安装开始并检测到用户输入时,不会保留临时值。
我该如何做到这一点?
答案 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的程序的问题的解决方案......
当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变量。