在Windows bat文件中找到JRE安装以运行java程序的可靠方法
在Windows上安装最新的JRE 7时,它不再向系统路径添加命令在Windows bat文件中找到JRE安装以运行java程序的可靠方法,java,batch-file,window,Java,Batch File,Window,在Windows上安装最新的JRE 7时,它不再向系统路径添加命令java。因此,在这种情况下,仅在bat文件中调用java--version将失败(尽管安装了java.com中的java) 在windows bat文件中查找java命令安装目录的可靠方法是什么? 我在以下地点看到过: C:\ProgramFiles\Java\jre6\bin\Java.exe C:\ProgramFiles\Java\jre7\bin\Java.exe C:\ProgramFiles(x86)\Java\j
java
。因此,在这种情况下,仅在bat文件中调用java--version
将失败(尽管安装了java.com中的java)
在windows bat文件中查找java命令安装目录的可靠方法是什么?
我在以下地点看到过:
C:\ProgramFiles\Java\jre6\bin\Java.exe
C:\ProgramFiles\Java\jre7\bin\Java.exe
C:\ProgramFiles(x86)\Java\jre7\bin\Java.exe
- 还没有试过JRE 8
注意:如果有多个,我想要默认值(或最新的-我不在乎)。这是如何找到它们的
Dir c:\java.exe /a/s
搜索整个驱动器
你可以把它放在一个for循环中。(在for
循环中%A
成为批处理中的%A
这会找到它,并将日、月、年放入不同的变量中
For /?
dir /?
findstr /?
这就是如何找到它们
Dir c:\java.exe /a/s
搜索整个驱动器
你可以把它放在一个for循环中。(在for
循环中%A
成为批处理中的%A
这会找到它,并将日、月、年放入不同的变量中
For /?
dir /?
findstr /?
如果已安装,请询问windows它在哪里
@echo off
setlocal enableextensions disabledelayedexpansion
rem Where to find java information in registry
set "javaKey=HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
rem Get current java version
set "javaVersion="
for /f "tokens=3" %%v in ('reg query "%javaKey%" /v "CurrentVersion" 2^>nul') do set "javaVersion=%%v"
rem Test if a java version has been found
if not defined javaVersion (
echo Java version not found
goto endProcess
)
rem Get java home for current java version
set "javaDir="
for /f "tokens=2,*" %%d in ('reg query "%javaKey%\%javaVersion%" /v "JavaHome" 2^>nul') do set "javaDir=%%e"
if not defined javaDir (
echo Java directory not found
) else (
echo JAVA_HOME : %javaDir%
)
:endProcess
endlocal
如果已安装,请询问windows它在哪里
@echo off
setlocal enableextensions disabledelayedexpansion
rem Where to find java information in registry
set "javaKey=HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
rem Get current java version
set "javaVersion="
for /f "tokens=3" %%v in ('reg query "%javaKey%" /v "CurrentVersion" 2^>nul') do set "javaVersion=%%v"
rem Test if a java version has been found
if not defined javaVersion (
echo Java version not found
goto endProcess
)
rem Get java home for current java version
set "javaDir="
for /f "tokens=2,*" %%d in ('reg query "%javaKey%\%javaVersion%" /v "JavaHome" 2^>nul') do set "javaDir=%%e"
if not defined javaDir (
echo Java directory not found
) else (
echo JAVA_HOME : %javaDir%
)
:endProcess
endlocal
请看这里,有一个批处理脚本:请看这里,有一个批处理脚本:
setlocal enableextensions disabledelayedexpansion
做什么?是否需要它?@GeoffreyDeSmet,setlocal
保护环境变量不受setlocal/endlocal
内部所做更改的影响,enableextensions
通常不需要,因为默认情况下会启用扩展,但这只是一个确保不会出现问题的好习惯<代码>disabledelayedexpansion的加入只是为了防止在将值分配给变量时出现一些解析器错误,当值包含感叹号(将被解析/解释/删除)时,我在1台Windows机器(win 8)上用最新的java.com(1.7)尝试了这一点,注册表项不是HKLM\SOFTWARE\JavaSoft\Java运行时环境
,而是HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java运行时环境
。是否有任何方法可以处理所有这些偏差?显然,Wow6432Node是唯一常见的偏差,因此对该regkey进行额外检查可以解决这个问题。谢谢:)(这是基于这个答案。)setLocalEnableExtensions-disabledelayedexpansion
做什么?是否需要它?@GeoffreyDeSmet,setlocal
保护环境变量不受setlocal/endlocal
内部所做更改的影响,enableextensions
通常不需要,因为默认情况下会启用扩展,但这只是一个确保不会出现问题的好习惯<代码>disabledelayedexpansion的加入只是为了防止在将值分配给变量时出现一些解析器错误,当值包含感叹号(将被解析/解释/删除)时,我在1台Windows机器(win 8)上用最新的java.com(1.7)尝试了这一点,注册表项不是HKLM\SOFTWARE\JavaSoft\Java运行时环境
,而是HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java运行时环境
。是否有任何方法可以处理所有这些偏差?显然,Wow6432Node是唯一常见的偏差,因此对该regkey进行额外检查可以解决这个问题。谢谢:)(基于这个答案)。