【问题标题】:How To Pipe Java Version in Batch File如何在批处理文件中传输 Java 版本
【发布时间】:2015-08-29 14:44:19
【问题描述】:

如何找到 java 版本并将其设置为变量?

我试过这个:

for /f "tokens=*" %%a in ('java -version | find "version"') do (set var1=%%a)

但 java 并未将其输出重定向到 find。另一个帖子建议了这个解决方案

java -version 2>&1 | findstr "version" >tmp.txt
for /f "tokens=*" %%x in (tmp.txt) do (set var1=%%x)
echo %var1%
del tmp.txt

但我想避免使用临时文件。

【问题讨论】:

  • 如果记忆正确,我认为你必须像^|这样在第一个例子的情况下转义管道第二个有什么问题?
  • 第一个,变量没有建立,不显示echo %var1%¿第二个有效,但我必须使用 find。
  • for /f "tokens=*" %%a in ('java -version ^| find /I "version"') do (set var1=%%a)findfindstr 也给出相同的结果。 @Gary 把这个作为答案,伙计......
  • @JosefZ 感谢您的确认。我用 Windows 已经有一分钟了,所以我不确定。
  • 我可以固执地道歉,但我看不到 echo var1 的输出:for / f "tokens = *" %% a in ('java -version ^ | find / I "version"' ) do (set var1 = %% a) echo first output echo %var1% echo second output

标签: batch-file io-redirection


【解决方案1】:

java.exe好像是在STDERR输出版本信息,所以正确的代码是:

for /f "tokens=*" %%a in ('java -version 2^>^&1 ^| find "version"') do (set var1=%%a)

如您所见,>&|^ 转义。

【讨论】:

  • 惊讶地发现为什么您的答案没有被赞成,更糟糕的是,甚至没有标记为正确,但效果很好。他们必须面临的问题是您的代码需要以批处理格式保存在文件中才能像魅力一样工作
  • @ShayHaned,谢谢!我没有在命令提示符中包含直接执行的代码,因为问题仅标记为batch-file;在命令提示符中,您需要将每个 %% 替换为 %...
  • 当然,你真的为我省去了几个小时的痛苦 :) 但我只是想问一下,如果我们要直接在 cmd 中执行代码,那么除了将每个 %% 替换为 % 之外,这也会对解决方案的 2^>^&1 ^| 部分产生影响吗?非常感谢您的回复
猜你喜欢
  • 2013-07-16
  • 2015-12-11
  • 2011-08-06
  • 1970-01-01
  • 2012-10-24
  • 2015-06-11
  • 1970-01-01
  • 2013-09-29
  • 2018-11-12
相关资源
最近更新 更多