批处理文件中的Java版本

时间:2013-08-09 17:58:40

标签: windows batch-file

我的问题与以下SO问题极为相似:How to get Java Version from batch script?

事实上,它确实几乎解决了我的问题。唯一的区别是我要检查基于%JAVA_HOME%的Java版本,用户可以自由修改。我面临的问题是这段代码:

@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'未被识别为内部或外部命令,   可操作程序或批处理文件。

有关如何解决此问题的任何想法? (对上述文章的评论也提到了这个问题)。我正在使用Windows 7机器

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

将%JAVA_HOME%变量编辑为:

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

如果您想要自动化,请输入

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

原因为什么: 批处理文件不接受引号;它将它们识别为单个文件。所以它试图找到“C:\ Program Files \ jdk1.7.0_25”不作为文件夹路径,而是作为根文件夹中的文件夹NAME。如果你输入 C:\“Program Files”\ jdk1.7.0.25它标识“Program Files”是单个文件。如果没有重定向运算符,它会认为路径是这样的; C:\程序\文件\ jdk1.7.0_25。它对我有用;它可能适合你。

希望有帮助

-SonorousTwo

答案 2 :(得分:0)

我有类似的问题,请查看我的质量保证:How to get Java version in a batch script subroutine?

从我的回答:

  

看起来输出到findstr的输出由于某种原因剥离了引号。

我设法在没有Epic_Tonic的解决方法的情况下修复了问题(使用路径作为参数非常困难。)

这适用于您的情况:

--skip

注意:set first=1 for /f "tokens=3" %%g in ('"%JAVA_HOME%\bin\java" -version 2^>^&1') do ( if !first!==1 echo %%~g set first=0 ) 仅用于搜索first输出的第一行(reference)。