使用管道将 Windows 命令解析为批处理文件中的变量 [重复]
Posted
技术标签:
【中文标题】使用管道将 Windows 命令解析为批处理文件中的变量 [重复]【英文标题】:Parse Windows Command with Pipe to Variable in Batch File [duplicate] 【发布时间】:2022-01-08 12:51:20 【问题描述】:我正在尝试创建一个 Windows 批处理脚本,将这个命令的输出存储在一个变量中。
java -XshowSettings:properties 2>&1 | findstr "user.dir"
输出是这样的
user.dir = C:\Program Files (x86)\Java\jre1.8.0_291\bin
我希望将以下部分 C:\Program Files (x86)\Java\jre1.8.0_291\bin 存储在我脚本的变量中。
我尝试过使用 for 循环,但它没有执行 findStr 命令。
任何帮助将不胜感激。
【问题讨论】:
user.dir
不就是当前工作目录吗?你为什么不直接使用%cd%
变量呢?
以后请拿tour阅读How to Ask一个好问题。在发布问题之前,请考虑使用搜索工具。我链接到的问题向您展示了如何执行此操作,但这里是您将使用的确切代码:FOR /F "tokens=1,* delims== " %%G IN ('java -XshowSettings:properties -version 2^>^&1^|find /i "user.dir"') DO SET "%%G=%%H"
是的抱歉 user.dir 是当前目录...我的意思是 java.home 是我要存储在成员变量中的目录
【参考方案1】:
@echo off
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
REM *** EXTRA CODE BEGIN
if not "%~1"=="fakejava" goto real
echo.xyz.ABC = dontcare 1>&2
echo.user.dir = C:\Program Files (x86)\Java\jre1.8.0_291\bin 1>&2
echo.hello.world = foo\bar 1>&2
goto :EOF
:real
REM *** EXTRA CODE END
set myvar=
set javacmd=%0 fakejava
REM Replace the line above with your Java command: java -XshowSettings:properties
for /F "tokens=1,* delims==" %%A in ('%javacmd% 2^>^&1') do (echo.%%~A|find /I "user.dir" >nul)&&set myvar=%%B
echo myvar=%myvar%
【讨论】:
以上是关于使用管道将 Windows 命令解析为批处理文件中的变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在Windows批处理中运行命令时管道Unity CLI编译日志文件