使用管道将 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 命令解析为批处理文件中的变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins构建步骤无法解析批处理命令[重复]

将批处理文件输出管道传输到 Python 脚本

在Windows批处理中运行命令时管道Unity CLI编译日志文件

如何将 Windows 路径转换为文件:URL,在批处理文件中,适合 SVN 命令行使用

批处理命令大全

批处理命令大全