Windows 如何逐行循环硬编码的键值对,并将每一对解析为键和值?

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"

我正在寻找下面所示的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"
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
)