Batch file 从存储在变量中的多行输出中获取第m行的第n列
显示如何将第二列输出到变量。我有一个类似的问题,我需要获取第m行的第n列,从已经存储在某个变量Batch file 从存储在变量中的多行输出中获取第m行的第n列,batch-file,cmd,Batch File,Cmd,显示如何将第二列输出到变量。我有一个类似的问题,我需要获取第m行的第n列,从已经存储在某个变量中的多行输出获取预定义的列分隔符(比如单个制表符)!x 例如: @echo off setlocal EnableExtensions EnableDelayedExpansion set "x=" set "STDERR=" (set LF=^ %=empty line=% ) for /F "delims=" %%E in ('
中的多行输出
获取预定义的列分隔符(比如单个制表符)!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\U LOCAL\U 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循环总是逐行进行(由换行符分隔)。通过分隔符(
选项:delims=
)将这些行拆分为令牌。生成令牌的数量由选项:令牌=
控制,在这种情况下,前三个令牌映射到%%1
,%%2
和%%3
有关更多信息,请阅读/?的帮助。 如果要分割令牌,必须使用
delims
选项(默认为空格和制表符)
如果您真的有一个内嵌换行符的多行变量,那么它很简单:
FOR /F "tokens=1,2,*" %%1 in ("!x!") DO (
echo Column1: %%1 --- Column2: %%2 --- Column3: %%3
)
FOR/F循环总是逐行进行(由换行符分隔)。通过分隔符(
选项:delims=
)将这些行拆分为令牌。生成令牌的数量由选项:令牌=
控制,在这种情况下,前三个令牌映射到%%1
,%%2
和%%3
有关更多信息,请阅读/?的帮助。 如果要分割令牌,必须使用
delims
选项(默认为空格和制表符)
使用
Skip=2
跳过前两行。使用delims=
。使用tokens=1,2,*
获取第三列中的所有剩余数据。并阅读帮助以获取/?,输出似乎不包含制表符,但包含空格作为分隔符。。。这给我带来了一个问题,因为我使用空格作为分隔符,然后我的路径(例如C:\Program Files\gs\gs9.26
)也被分割。因为我不知道路径中会有多少空格,所以这个解决方案似乎是使用skip=2
对前两行进行uslessSkip。使用delims=
。使用tokens=1,2,*
获取第三列中的所有剩余数据。并阅读帮助以获取/?,输出似乎不包含制表符,但包含空格作为分隔符。。。这给我带来了一个问题,因为我使用空格作为分隔符,然后我的路径(例如C:\Program Files\gs\gs9.26
)也被分割。因为我不知道路径中会有多少空间,所以这个解决方案似乎没有用
@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
)