从…起
this question
:
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 Version in a batch file
根据
this answer
,如果这确实是问题所在,我必须通过在每个包含空格的目录周围添加引号,以某种方式转换传入的路径。这听起来很痛苦,我希望有另一种解释;我仍然不明白为什么在这种情况下,仅仅传递“java”不起作用。
(注:使用
usebackq
(反引号没有区别)