С этот вопрос :
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do (
@echo Output: %%g
set JAVAVER=%%g
)
Как я могу поместить это в подпрограмму и вызвать ее, передавая путь к исполняемому файлу Java?Вот пример моей проблемы:
@echo off
setlocal enabledelayedexpansion
call :GET_JAVA_VER "java"
goto END
:GET_JAVA_VER
for /f "tokens=3" %%g in ('%1 -version 2^>^&1 ^| findstr /i "version"') do @echo %%g
%1 -version 2>&1 | findstr /i "version"
goto :EOF
:END
endlocal
Это выводит:
The filename, directory name, or volume label syntax is incorrect.
java version "10.0.1" 2018-04-17
Мне кажется, что цикл for оценивает параметр (%1
) по-разному.
В чем разница?
РЕДАКТИРОВАТЬ
Возможный дубликат Java-версии в пакетном файле
Согласно этому ответу , если это действительно проблема, мне придется каким-то образом преобразовывать переданный путь, добавляя кавычки вокруг каждого каталога, содержащего пробелы.Это звучит как боль, и я надеюсь, что есть другое объяснение;Я до сих пор не понимаю, почему в этом случае просто передать «java» не работает.
(Примечание: использование usebackq
и обратных кавычек не имеет значения)