下面代码中的第三个FOR语句应该从'java full version“1.8.0_66-b18”的命令输出返回'18066',但它返回空白,这导致后面的比较失败。有人可以提供一些帮助吗?
@echo off
set MSIFileName=jre1.8.0_66.msi
set KeyName="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\javaws.exe"
for /f tokens^=2-5^ delims^=e._m^" %%a in ("%MSIFilename%") do set VersionToInstall=%%a%%b%%c%%d
for /f "tokens=2*" %%h in ('reg query %KeyName% /v Path') do set JavaHome=%%i
PATH "%PATH%;%JavaHome%"
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set InstalledVersion=%%j%%k%%l%%m
if "%InstalledVersion%."=="." goto INSTALL
if "%InstalledVersion%" GEQ "%VersionToInstall%" goto END
回复的TIA。
注意:我从npocmaka用户那里借了一些代码here。
- 编辑 -
我仍然无法解释为什么原始代码不起作用,但我找到了一个让我的脚本正常工作的解决方法。而不是将JavaHome添加到系统PATH,以便脚本可以找到java.exe,而是使用'cd'代替。希望这有助于其他人在这里更新代码...
@echo off
set MSIFileName=jre1.8.0_66.msi
set KeyName="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\javaws.exe"
set JavaHome=0
set IsNumber=0
for /f tokens^=2-5^ delims^=e._^" %%a in ("%MSIFilename%") do set VersionToInstall=%%a%%b%%c%%d
for /f "tokens=2*" %%e in ('reg query %KeyName% /v Path') do set JavaHome="%%f"
if %JavaHome% EQU 0 goto INSTALL
cd %JavaHome%
for /f tokens^=2-5^ delims^=._-^" %%g in ('java -fullversion 2^>^&1') do set InstalledVersion=%%g%%h%%i%%j
for /f "tokens=* delims=0123456789" %%k in ("%InstalledVersion%") do (
if "[%%k]" EQU "[]" set IsNumber=1
)
if %IsNumber% EQU 0 goto INSTALL
if "%InstalledVersion%" GEQ "%VersionToInstall%" goto END
答案 0 :(得分:0)
for /f "tokens=4 delims= " %%j in ('java -fullversion 2^>^&1') do set InstalledVersion=%%~j
echo %InstalledVersion%
对我很开心。
1.8.0_73-B02
来自我的版本
java完整版“1.8.0_73-b02”