batch-file - 从存储在变量中的多行输出中获取第 m 行的第 n 列
问题描述
CMD.exe : Get second column output to variable显示了如何将第二列输出到变量。我有一个类似的问题,我需要从已经存储在某个变量中的多行输出中获取第 m 行的第 n 列,并具有预定义的列分隔符(比如说一个 TAB 字符)。 !x!
举个例子:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "x="
set "STDERR="
(set LF=^
%=empty line=%
)
for /F "delims=" %%E in ('
2^>^&1 ^(^
for /F "delims=" %%O in ^('^
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Artifex\GPL Ghostscript\9.26" /ve ^^^^^^^| findstr /N /R "^"^
'^) do @^(^
echo ^^^^^^^|%%O^
^)^
^) ^| findstr /N /R "^"
') do (
set "LINE=%%E"
set "LINE=!LINE:*:=!"
if "!LINE:~,1!"=="|" (
set "x=!x!!LINE:*:=!!LF!"
) else (
set "STDERR=!STDERR!!LINE!!LF!"
)
)
echo !x!
打印以下行
HKEY_LOCAL_MACHINE\SOFTWARE\Artifex\GPL Ghostscript\9.26
(默认) REG_SZ C:\Program Files\gs\gs9.26
解决方案
如果您真的有一个带有嵌入式换行符的多行变量,那么它很简单:
FOR /F "tokens=1,2,*" %%1 in ("!x!") DO (
echo Column1: %%1 --- Column2: %%2 --- Column3: %%3
)
FOR /F 循环总是逐行进行(由换行符分隔)。
这些行被分隔符 ( option: delims=
) 分成标记,生成多少标记由 控制option: tokens=
,在这种情况下,前三个标记映射到%%1
和。
有关更多信息,请阅读帮助%%2
%%3
FOR /?
如果要拆分标记,则delims
必须使用该选项(默认为空格和 TAB)。
For /F "tokens=1,2,3 delims=<a TAB CHARACTER>" ...
完整示例:
@echo off
setlocal EnableDelayedExpansion
(set LF=^
%==%
)
set "multiline=Line1 col2!LF!Line2 colB!LF!Line3 col-two"
echo multiline - contains:!LF!!multiline!!LF!-------
FOR /F "tokens=1,2,*" %%1 in ("!multiline!") DO (
echo Column1: %%1 --- Column2: %%2 --- Column3: %%3
)
推荐阅读
- python - BeautifulSoup 已安装但适用于 Python3 但我无法找到 bs4 模块
- sql - 是否可以运行具有多行的查询,其中一行满足一个条件而其他行满足不同的条件?
- activemq-artemis - 名称与地址名称不匹配的消息在哪里发送到队列?
- javascript - 由于错误对象长度为零,提交被调用
- azure - 停用高级数据安全性
- python - 如何选择随机字符串的值和长度?
- javascript - 为什么在表单内的 onclick 事件上调用名为“submit()”的函数在 WebKit 中的行为不同?
- docker - 如何了解 prometeus exporter agent 是否在远程机器上导出指标
- c - 在C文件的开头插入文件中的行数的最佳方法是什么?
- express - 不知道如何让快速路由工作