下面代码中的第三个FOR语句应该从'java完整版"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 found here那里借用了一些代码。
-编辑-
我仍然不知道为什么原始代码不能工作,但我找到了一个可以让我的脚本工作的变通方法。我没有将JavaHome添加到系统路径以便脚本能够找到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
发布于 2016-02-18 10:30:01
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"
https://stackoverflow.com/questions/35333862
复制相似问题