2013-08-16 156 views
1

我想合并下面的批处理文件。必须有一种更简单的方法来检测当前安装的Java版本,如果它是最新的转换,则不安装最新版本。 合并这2个批量查询?

我很想给了FOR/F命令,发现这也是在线:

@echo off 
setlocal 

set VERSION7="1.7.0_25" 
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do (
@echo Output: %%g 
set JAVAVER=%%g 
) 
set JAVAVER=%JAVAVER:"=% 
@echo Output: %JAVAVER% 

for /f "delims=. tokens=1-3" %%v in ("%JAVAVER%") do (
@echo Major: %%v 
@echo Minor: %%w 
@echo Build: %%x 
) 
endlocal 

我目前的脚本来安装Java运行时是:

IF exist %windir%\gpologs\jre_1.7.21.x86.txt (goto eof) ELSE (goto Q1) 

:Q1 
Reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F86417025FF}" 
if "%ErrorLevel%"=="0" (goto eof) ELSE (goto Q2) 

:Q2 
Reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83217025FF}" 
if "%ErrorLevel%"=="0" (goto eof) ELSE (goto Q3) 

:Q3 
Reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83217021FF}" 
if "%ErrorLevel%"=="0" (goto eof) ELSE (goto Install) 

:Install 
msiexec /i "\\Sharename\GPOInstalls\Java\Java 1.7.0_21 x86\jre1.7.0_21.msi" /qn 
if %ErrorLevel% EQU 0 (
    >>"\Sharename\gpolog\jre_1.7.21.x86.csv" echo "%computername%","%date%","%Time%","%ErrorLevel%","Java Runtime 1.7.0_21x86 Installed" 
    >>"%windir%\GpoLogs\jre_1.7.21.x86.txt" echo "Java Runtime 1.7.0_21x86 Installed" 
) else (
    >>"\\Sharename\gpolog\JavaInstallErrors.csv" echo "%computername%","%date%","%Time%","%ErrorLevel%","Error trying to install Java 1.7_21x86" 
) 

:eof 

如何使用第一个代码(for/f)来搜索java版本,如果它不符合最新版本,请转到我的第二部分代码中安装部分?

我不知道如何将它包含在for/f部分。

任何帮助表示赞赏

+0

'java -version'怎么样? – adarshr

回答

1

我想建议与wget for Windowsgrep for Windows的解决方案。解释是在评论中:

@ECHO OFF &SETLOCAL 

REM get the latest Java version from the Oracle web site 
FOR /f "tokens=3" %%a IN ('wget -O- "http://www.oracle.com/technetwork/java/javase/7u-relnotes-515228.html" 2^>nul^|grep -io "Changes in [^<]*"') DO (
    IF NOT DEFINED JAVA_latest SET "JAVA_latest=%%~a" 
) 

REM get the current installed Java version 
for /f "tokens=3" %%a in ('java -version 2^>^&1 ^| find /i "version"') do SET "JAVA_current=%%~a" 

REM print the results 
ECHO Java versions: latest: %JAVA_latest%, current installed: %JAVA_current% 

REM compare the versions, exit if equal 
IF "%JAVA_latest%"=="%JAVA_current%" (ECHO Latest Java version already installed.&GOTO:eof) 

REM put your install code here 
ECHO here goes your code 
+0

嗨Endoro,感谢这可能是当我有一点时间在我手上,关于Wget/Grep我需要下载来源还是完整安装? – Mikoyan

+0

@Mikoyan不,有二进制文件。你不需要编译一些东西。 – Endoro

+0

但是我确实需要在系统上使用这个wget/grep来调用这个工具吗?如果我输入wget /?我什么也没得到。 – Mikoyan