@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
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
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
@Abhishek, intente poner comillas dobles alrededor de '% JAVA_HOME%', así: '"% JAVA_HOME% '. –