Windows 如何逐行循环硬编码的键值对,并将每一对解析为键和值?
我正在寻找下面所示的Unix bash代码的Windows批处理(Cmd.exe)副本。键值对由herdeoc给出。与Windows 如何逐行循环硬编码的键值对,并将每一对解析为键和值?,windows,batch-file,cmd,keyvaluepair,Windows,Batch File,Cmd,Keyvaluepair,我正在寻找下面所示的Unix bash代码的Windows批处理(Cmd.exe)副本。键值对由herdeoc给出。与while命令关联的read命令会重复读取这些对IFS=$';'定义分号(;)作为键和值之间的分隔符。read命令将每一对解析为变量ky和val。循环体应处理变量$ky和$val。请注意,值可能包含空格 while IFS=$';' read -r ky val; do # Do something about $ky and $val echo "$ky - $val"
while
命令关联的read
命令会重复读取这些对<代码>IFS=$';'代码>定义分号(;)作为键和值之间的分隔符。read
命令将每一对解析为变量ky
和val
。循环体应处理变量$ky
和$val
。请注意,值可能包含空格
while IFS=$';' read -r ky val; do
# Do something about $ky and $val
echo "$ky - $val"
done < <(cat << EOF
a;P p
b;Q q
c;R r
EOF
)
# OUTPUT
# a - P p
# b - Q q
# c - R r
命令语句read-r ky val
属于while
的条件命令
键值对的列表可被视为关联列表。但是,不需要创建数组,这将占用列表之外的内存
在Cmd.exe上,我想到了
for %%i in (
a;P p
b;Q q
c;R r
) do (
rem Parse each pair into two variables.
rem Do something about the two variables.
)
但是,我不知道如何解析每一对,也不知道如何定义分隔符
事实上,这个批处理代码甚至不像我预期的那样工作。我希望此批处理代码只执行循环体三次,并且%%I一次会收到一整对(或整行)。但是,循环体实际上执行了九次,并且%%i一次只接收一个字母,如下代码所示
@echo off
setlocal enabledelayedexpansion
set n=1
for %%i in (
a;P p
b;Q q
c;R r
) do (
rem Parse each pair into two variables.
rem Do something about the two variables.
echo !n!
echo %%i
set /a n+=1
)
rojo对问题“”的回答(问题/30403022)模拟了关联数组。但是,它使用包含键值对的外部文件。我不想使用文件来提供键值对。我想硬编码键值对。这应该是一行一行的;也就是说,每对一行。因此,列表必须由多行组成。我不想把清单放在一条长长的线上,就像
a;P pNLb;Q qNLc;R r # <-- I do not want this
a;P-pNLb;Q qNLc;R#如果键/值对不包含这些字符中的任何字符“?*
,则这将满足您的要求
for %%P in (
"a;P p"
"b;Q q"
"c;R r"
) do for /F "tokens=1* delims=;" %%A in ("%%~P") do (
echo Key: %%A ** Value: %%B
)
每个键/值对可以如上图所示放在单独的一行中,也可以放在一行中。这只是口味的问题,只要引用的键/值对被至少一个分隔符分隔,如;,=
FOR
的是快乐的
for %%P in (
"a;P p"
"b;Q q"
"c;R r"
) do for /F "tokens=1* delims=;" %%A in ("%%~P") do (
echo Key: %%A ** Value: %%B
)