在Windows批处理文件中,可靠地查找JRE安装路径以运行Java程序。
在Windows批处理文件中,可靠地查找JRE安装路径以运行Java程序。
在Windows上安装最新的JRE 7时,不再将java
命令添加到系统路径中。因此,在批处理文件中调用java --version
会失败(尽管已经安装了java.com上的Java)。\n在Windows批处理文件中,有什么可靠的方法来查找java命令的安装目录?\n我在以下位置看到过它:\n
- \n
C:\\Program Files\\Java\\jre6\\bin\\java.exe
C:\\Program Files\\Java\\jre7\\bin\\java.exe
C:\\Program Files (x86)\\Java\\jre7\\bin\\java.exe
- 尚未尝试JRE 8。
\n
\n
\n
\n
\n注意:如果存在多个位置,我希望使用默认的位置(或最新的位置 - 我不在乎)。
可靠地查找Windows批处理文件中的JRE安装以运行Java程序的方法
问题的原因:
在Windows批处理文件中,需要找到Java Runtime Environment(JRE)的安装路径,以便能够运行Java程序。然而,由于Windows系统的不确定性,无法确定JRE的安装路径。因此,需要一种可靠的方法来查找JRE的安装位置。
解决方法:
以下是如何查找JRE安装路径的方法:
1. 在批处理文件中使用以下命令:
Dir c:\java.exe /a/s
这将在整个驱动器上搜索JRE的安装路径。
2. 可以将其放在for循环中。在for循环中,需要将变量`%A`更改为`%%A`。
for /f "tokens=1-8 delims=/ " %%A in ('dir "c:\program files\java.exe" /a /s^|findstr /i /v /r "DIR VOL \(s\) Listed"') do echo day %%A month %%B Year %%C Name %%G
这将找到JRE的安装路径,并将日期、月份和年份分别存储在不同的变量中。
3. 可以使用以下命令来获取更多关于for循环、dir命令和findstr命令的信息:
For /?
dir /?
findstr /?
这将提供有关使用这些命令的详细说明和示例。
通过以上方法,可以可靠地在Windows批处理文件中找到JRE的安装路径,并使用它来运行Java程序。
可靠的方法来查找Windows bat文件中的JRE安装以运行Java程序
在Windows上运行Java程序之前,需要先找到JRE的安装位置。下面的内容提供了一种可靠的方法来查找JRE的安装位置,并解决了可能出现的一些问题。
首先,使用以下代码询问Windows JRE的安装位置:
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
上述代码首先通过查询注册表获取当前Java版本,然后获取该版本的Java安装路径。如果找不到Java版本或安装路径,则会输出相应的错误信息。
接下来,解释一下代码中的一些关键部分:
- `setlocal enableextensions disabledelayedexpansion`:`setlocal`命令保护环境变量不受在`setlocal/endlocal`内部所做的更改影响。`enableextensions`通常不需要,因为扩展默认已启用,但这样做只是一个良好的习惯,以确保不会出现问题。`disabledelayedexpansion`被包含在内,以防止在给变量赋值时出现一些解析错误,例如变量的值包含感叹号标记(将被解析/解释/移除)。
在使用这段代码时,有用户提到在一台Windows 8的机器上运行最新版本的Java(1.7)时,注册表键不是`HKLM\SOFTWARE\JavaSoft\Java Runtime Environment`,而是`HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment`。对此,可以通过额外检查该注册表键来解决:
if not exist "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" (
set "javaKey=HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment"
)
这将在默认的注册表键找不到时,切换到另一个注册表键进行查询。
总结起来,通过这段代码,可以可靠地找到Windows系统中JRE的安装位置,以便在bat文件中运行Java程序。如果在默认的注册表键中找不到JRE安装位置,还会自动切换到另一个注册表键进行查询。这样可以确保对于不同的Windows系统和JRE安装方式,都可以找到正确的JRE安装位置。