上我们有使用下面的命令行(它是在一个批处理文件执行)一个问题:“在这个时候意外”发生仅单台计算机
for /f tokens^=3^ delims^=.-_^" %%j in ('cmd /c "%JAVA_HOME%\bin\java.exe" -version 2^>^&1 ^| findstr /i "version"') do set "jver=%%j"
当我们执行这一行,我们得到java版本。这工作每次,但现在我们有与Windows 10在这里电脑不能执行该脚本,并在这条线失败,并说:
8 was unexpected at this time
所以我想这个脚本能够读取1.8.0_101 Java版本字符串,但不知何故失败。该jver变量仅使用一次:
if %jver% LSS 8 (
goto :jdk_wrong_version
)
是否有人知道为什么会出现这种奇怪的行为?因为几乎所有的机器都没有这个命令的问题。我们执行java -version时的输出似乎很好。
编辑:
以下线在启动时运行(因此,我们检查,如果JAVA_HOME可用):
"%JAVA_HOME%\bin\java.exe" -version 1> NUL 2> NUL
if not %errorLevel%==0 goto :java_not_found
所以整个剧本是这样的:
"%JAVA_HOME%\bin\java.exe" -version 1> NUL 2> NUL
if not %errorLevel%==0 goto :java_not_found
for /f tokens^=3^ delims^=.-_^" %%j in ('cmd /c "%JAVA_HOME%\bin\java.exe" -version 2^>^&1 ^| findstr /i "version"') do set "jver=%%j"
if %jver% LSS 8 (
goto :jdk_wrong_version
)
如果我删除了'CMD/C'出现以下错误:文件名,目录名或卷标语法不正确。 – Highriser
如果从'( 'CMD/C “%JAVA_HOME%\ BIN \ java.exe的” -version 2 ^> ^&1^| FINDSTR/I “版本”')除去'CMD/C'',剩余的字符串' ( ' “%JAVA_HOME%\ BIN \ java.exe的” -version 2 ^> ^&1^| FINDSTR/I “版本”')作为'%JAVA_HOME%\ BIN \ java.exe的”执行'-version 2 ^> ^&1^| findstr/i“version' by'for/F',这是无效的;不要在搜索字符串'version'周围加''“',它会起作用;这是因为'为/ F'消除周围'“”'*和*,如果剩余的字符串出现在'“”'包围,他们将被删除,以及... – aschipfl
好。第一个问题:当JAVA_HOME路径有空格时会发生什么?去除字符的其他东西奏效。谢谢! :) – Highriser