我想 Qt 安装程序是一个 32 位应用程序。因此启动了 32 位,它在 64 位 Windows 上cmd.exe
运行 32 位。reg.exe
所以有必要了解以下知识:
并且通常还建议了解有关在 Windows 上注册应用程序的知识。
这是获取当前 Java 版本的快速编码解决方案:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Use reg.exe in Windows system directory on 32-bit Windows
rem and on 64-bit Windows on being executed in 64-bit environment.
set "RegExe=%SystemRoot%\System32\reg.exe"
rem But on 64-bit Windows with running this batch file in 32-bit environment,
rem use system redirector Sysnative to run also 64-bit REG in the directory
rem %SystemRoot%\System32 instead of 32-bit REG in %SystemRoot%\SysWOW64.
if exist %SystemRoot%\Sysnative\reg.exe set "RegExe=%SystemRoot%\Sysnative\reg.exe"
rem First query the version of 64-bit Java on 64-bit Windows
rem respectively version of 32-bit Java on 32-bit Windows.
for /F "skip=2 tokens=1,2*" %%A in ('%RegExe% query "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /v CurrentVersion 2^>nul') do if /I "%%A" == "CurrentVersion" set "JavaVersion=%%C" & goto HaveJavaVersion
rem Java version not found. On 64-bit Windows query version of 32-bit Java.
if not "%ProgramFiles(x86)%" == "" for /F "skip=2 tokens=1,2*" %%A in ('%RegExe% query "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /v CurrentVersion 2^>nul') do if /I "%%A" == "CurrentVersion" set "JavaVersion=%%C" & goto HaveJavaVersion
rem Is Java installed and registered at all?
for /F "skip=2 tokens=1,2*" %%A in ('%RegExe% query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\javaws.exe" /v Path 2^>nul') do if /I "%%A" == "Path" set "JavaPath=%%C" & goto HaveJavaPath
goto JavaNotInstalled
:HaveJavaPath
if not exist "%JavaPath%\java.exe" goto JavaNotInstalled
rem Java prints version information to STDERR instead of STDOUT. For that
rem reason 2>&1 is necessary to redirect the output to STDOUT for being
rem captured by FOR from background command process started with cmd /C
rem by FOR for executing the command line within the round brackets.
for /F "tokens=2*" %%A in ('"%JavaPath%\java.exe" -version 2^>^&1') do if /I "%%A" == "version" set "JavaVersion=%%~B" & goto HaveJavaVersion
:JavaNotInstalled
echo Java is not installed.
goto EndBatch
:HaveJavaVersion
echo Current version of Java is: %JavaVersion%
:EndBatch
endlocal
我将只使用Path
从根本上查询HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\javaws.exe
或什至更好地使用此注册表项的默认值的解决方案,java.exe
如果存在则运行以获取其版本。但是没有描述真正需要哪个 Java 版本以及应该为哪个版本的 Windows 编写这个批处理文件。我添加了额外的代码,也可以在 Windows XP 和 Windows Server 2003 上工作(未经测试)。Windows XP 和 Windows Server 2003 上的 REG 输出的信息与Windows Vista/Server 2008 和更高版本的 Windows 版本上的 REG 不同,如阅读用空格分隔的单词和字符串值的答案代码中的注释中所解释的那样,批处理脚本中也包含空格。
要了解使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
- 回声/?
- 本地/?
- 为了 /?
- 去 /?
- 如果 /?
- 注册/?
- 注册查询 /?
- 雷姆/?
- 放 /?
- 设置本地/?