FOR语句返回命令输出的空白变量

时间:2016-02-11 08:07:50

标签: batch-file for-loop

下面代码中的第三个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

1 个答案:

答案 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”