我只是在学习批处理脚本。我正在审查getJavaVersion.bat脚本在GitHub上。我理解了下面代码行中的2^>^&1
表达式的用途。但我无法理解这个语法(2^>^&1
)是如何使用的。你能帮我做这个吗?
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
下面的命令显示生成的值:
for /f "delims=" %%i in ('java -fullversion') do set output=%%i
echo %output%
:: OUTPUT >> java full version "18.0.1.1+2-6"
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
echo %jver%
:: OUTPUT >> 18011+2
发布于 2022-05-18 12:13:10
命令java -fullversion
返回)而不是STDOUT流(句柄1
)。for /F
与in
关键字后面的命令一起捕获并解析STDOUT流中的命令输出。要捕获STDERR流,您需要2>&1
,这意味着句柄2
(STDERR)被重定向到句柄1
指向的位置(STDOUT)。为了确保重定向不应用于for /F
命令本身,您需要),以便特殊字符>
和&
在处理整个for /F
命令行之前失去它们的特殊意义。要捕获的命令最终以未转义的方式包含重定向表达式。
https://stackoverflow.com/questions/72287776
复制相似问题