2011-04-15 15 views
10

estoy tratando de conseguir '6' de la versión Java de salida dada a continuación¿Cómo obtener la versión Java del script por lotes?

java version "1.6.0_21" 
Java(TM) SE Runtime Environment (build 1.6.0_21-b07) 
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing) 

Por el mismo que escribió este script por lotes

set VERSION6="1.6.0_21" 
java -version 2>&1 | findstr "version" >ab.txt 
for /f "tokens=3" %%g in (ab.txt) do (
    if not %%g == %VERSION6% echo %%g 
    echo %%g 
) 

%%g muestra "1.6.0_21"

¿Puede alguien guiarme para corregir la dirección? No estoy muy familiarizado con for /f.

Respuesta

9
@echo off 
setlocal 

set VERSION6="1.6.0_21" 
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 

En el primer bucle de for, "tokens=3" dice que vamos a utilizar sólo el tercer token de la salida del comando. En lugar de redirigir la salida del comando java -version a un archivo, podemos ejecutar este comando dentro del propio bucle for. Los caracteres de intercalación (^) son caracteres de escape y se necesitan para insertar los símbolos >, & y | en la cadena de comandos.

Dentro del cuerpo del bucle for, establecemos una nueva var, JAVAVER, para que podamos hacer algo de manipulación de la cadena de versión más adelante.

El comando set JAVAVER=%JAVAVER:"=% quita las comillas dobles de la cadena de versión.

El último bucle for analiza la cadena de versión java. delims=. dice que vamos a delimitar tokens usando puntos. tokens=1-3 dice que vamos a pasar los primeros tres tokens de la cadena al cuerpo del bucle. Ahora podemos obtener los componentes de la cadena de versión java utilizando la variable explícita, %%v y las variables implícitas (letras siguientes en el alfabeto) %%w y %%x.

Cuando ejecuto esto en mi sistema me sale:

Output: "1.6.0_24" 
Output: 1.6.0_24 
Major: 1 
Minor: 6 
Build: 0_24 
+0

Gracias Patrick, eso fue realmente genial. Desearía escribir el mío algún día, pero esto para/f es bastante confuso para mí :( – abi1964

+0

Hay una cosa más que debo preguntar relacionada con la pregunta anterior. Si mi ruta JAVA_HOME está configurada en "c: \ Archivos de programa" \ .... "y cuando ejecuto el script, obtiene un espacio y dice" 'C: \ Program' no se reconoce como un comando interno o externo, programa operable o archivo por lotes. "¿Cómo puedo solucionar este problema? – abi1964

+1

@Abhishek, intente poner comillas dobles alrededor de '% JAVA_HOME%', así: '"% JAVA_HOME% '. –

1

Esto extraerá la parte menor del número de versión:

java -version 2>&1 | awk '/version/ {print $3}' | awk -F . '{print $2}' 

Sin embargo, puede ser mejor para extraer el mayor.menor y partido en que en caso de Oracle nunca cambiar el esquema de número de versión de nuevo por ejemplo:

java -version 2>&1 | awk '/version/ {print $3}' | egrep -o '[0-9]+\.[0-9]+' 
+0

Hola gracias Owen. awk no funciona en Windows, utilicé el mismo en Linux, pero el tuyo parece mejor aquí es mío java -versión 2> & 1 | cabeza -1 | awk '{print $ NF}' | cut -d '.' -f2 – abi1964

+0

Ah, mi mal. Lo siento, no leí lo suficiente como para darme cuenta de que era Windows. –

+0

Está bien y parece que necesito 15 reputación para votar. Soy nuevo en este sitio, lo haré cuando tenga suficiente reputación en este sitio. ¡Gracias de nuevo! – abi1964

0
for /f tokens^=2-5^ delims^=.-_^" %j in ('java -fullversion 2^>^&1') do @set "jver=%j%k%l%m" 

Esto almacenará la versión de Java en jver variable y como entero Y que se puede utilizar para las comparaciones .eg

if %jver% LSS 16000 echo not supported version 

. Puede utilizar versiones más importantes eliminando% k,% l y% m.Esta versión del símbolo del sistema.

Para.bate de uso esto:

@echo off 
PATH %PATH%;%JAVA_HOME%\bin\ 
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m" 

Según mis pruebas esta es la manera más rápida para obtener la versión Java de murciélago (ya que utiliza sólo los comandos internos y cuáles no externos como FIND, FINDSTR y no utiliza GOTO cuales también puede ralentizar el script). Algunos proveedores de JDK no admiten el modificador -fullversion o su implementación no es la misma que la proporcionada por Oracle (mejor evitarlos).

Cuestiones relacionadas