2013-08-09 3 views
1

Мой вопрос, очень похож на следующий SO вопрос: How to get Java Version from batch script?Java версии в пакетном файле

На самом деле, это было почти решить мою проблему. Единственное различие заключается в том, что я должен проверить версию Java на основе% JAVA_HOME%, которую пользователь может изменить. Вопрос, который я облицовкой с этим кодом:

@ECHO OFF 
SETLOCAL enableextensions enabledelayedexpansion 

IF "%JAVA_HOME%"=="" (
    @ECHO Please set JAVA_HOME environment variable 
    EXIT /B 
) 

@echo "%JAVA_HOME%" 

REM Checking JAVA_VERSION 
SET JAVA_VERSION= 
FOR /f "tokens=3" %%g in ('"%JAVA_HOME%"\bin\java -version 2^>^&1 ^| findstr /i "version"') do (
     SET "JAVA_VERSION=%%g" 
) 

% JAVA_HOME %% в моей системе указывает на "C: \ Program Files \ jdk1.7.0_25" (уведомление пространство на пути)

Даже с кавычками, я получаю следующее сообщение об ошибке в командной строке:

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

Любая идея о том, как решить эту проблему? (В комментариях к вышеупомянутой статье также упоминается этот вопрос). Я работаю на машине Windows 7

ответ

3
 
FOR /f "tokens=3" %%g in ('"%JAVA_HOME%\bin\java" -version 2^>^&1 ^| findstr /i "version"') do (
     SET "JAVA_VERSION=%%g" 
) 
+0

все еще получаю ту же ошибку. Я тоже пробовал это. Если после этого я повторяю% JAVA_VERSION%, это показывает, что переменная сохранила «-version» как ее значение – Sujay

+0

Возможно, но вы не получите ошибку: '' C: \ Program 'не распознается как внутренняя или внешняя команда, оперативная программа или командный файл. – Endoro

+0

Я делаю ту же самую ошибку Endoro. Просто я добавил еще один оператор эха после того, как он увидел, что JAVA_VERSION пуст или нет. Вот где оно показывает «-version» как значение для этой переменной. Это не связано с моей реальной проблемой. – Sujay

1

Отредактируйте% JAVA_HOME% Variable в:

C:\"Program Files"\jdk1.7.0_25 

, если вы хотите, чтобы он автоматизирован, тип

set %JAVA_HOME%=C:\"Program Files"\jdk1.7.0_25 

Reason Why: Пакетный файл не принимает кавычки; Он идентифицирует их как один файл. Поэтому он пытается найти «C: \ Program Files \ jdk1.7.0_25» НЕ как путь к папке, а как папку NAME в вашей корневой папке. Если вы введете C: \ "Program Files" \ jdk1.7.0.25, он идентифицирует, что "Program Files" - это один файл. Если нет операторов перенаправления, он будет думать, что путь будет таким: C: \ Program \ Files \ jdk1.7.0_25. Это сработало для меня; Вероятно, это сработает для вас.

Надеюсь, что помог

-SonorousTwo

+0

Это имеет смысл. Спасибо за объяснение и обходной путь! – Sujay