重用“ where”命令的结果

时间:2018-11-26 08:07:30

标签: windows batch-file cmd

我需要在Windows计算机上找到Java 64位的特定位置。我考虑过使用where java查找所有可能的位置。下一步,我需要隔离以C:\Program Files\Java\...开头的正确位置,然后执行以下命令:

cmd /K %var% -jar %~dp0XYZ.jar

这是查找随时间变化的Java路径的正确方法吗?如果是,如何获取从where到变量的路径?


对于where的输出,假定以下条件:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe
C:\Program Files\Java\jdk1.8.0_144\bin\java.exe
C:\Program Files\Java\jdk1.8.0_144\jre\bin\java.exe

获取第二或第三结果无关紧要,因为在这种情况下两者均为64位。但由于我不能保证该输出,因此识别64位版本的唯一方法是使用C:\Program Files\Java\

1 个答案:

答案 0 :(得分:0)

下面的bat脚本(为说明起见)应该可以解决问题:

@ECHO OFF
rem SETLOCAL EnableExtensions DisableDelayedExpansion

set "_flagexe64=:\Program Files\Java\"
set "_javaexe64="

for /f "delims=" %%G in ('where java.exe') do (
  rem next two lines for debugging only
  echo checking "%%~G"
  "%%~G" -version
  if not defined _javaexe64 (
    set "_javaexe64=%%~G"
    call :check64
  )
)

rem final check
if not defined _javaexe64 (
  1>&2 echo sorry, no java.exe found under "%_flagexe64%"
  goto :eof
)
rem java.exe found:
echo "%_javaexe64%"
goto :eof

:check64
  call set "_aux=%%_javaexe64:%_flagexe64%=%%"
  if "%_aux%" == "%_javaexe64%" set "_javaexe64=" 
goto :eof