列出批处理文件中的键 - 值对

时间:2013-10-16 18:42:55

标签: batch-file

我正在编写Windows批处理脚本来处理用户输入。输入字符串如下所示:

key1=value1 key2=value2 key3="value 3"

即。用空格分隔的一对对,每对具有 key = value 的格式,其中 value 可以被引用。引用的值可能包含空格。此类对的数量不固定 - 从1到任何合理的数量,具体取决于用户。

对于每一对,我需要创建一个名为 key 的环境变量,并为其指定 value

最初我尝试使用下面的代码迭代该字符串(对于演示,我将INPUT字符串硬编码,但通常它将作为参数传递给脚本):

@ECHO OFF
set INPUT=key1=value1 key2=value2 key3="value 3"
for %%i in (%INPUT%) do (
    echo %%i
)

这不起作用,因为它不仅通过空格分割,而且还通过=仅给出单个标记的输出序列而不是键=值对:

d:\home\work>testParameters.bat
key1
value1
key2
value2
key3
"value 3"

我看到for /f %%i in ("%INPUT%")可能会做到这一点,但它会带来一个不同的问题:正如我之前所说,对的数量可能会有所不同,我不清楚我将如何迭代所有这些。< / p>

请问这里有什么建议吗?

1 个答案:

答案 0 :(得分:3)

@echo off
setlocal EnableDelayedExpansion

set INPUT=key1=value1 key2=value2 key3="value 3"
for %%a in (%input%) do (
   if not defined varname (
      set varname=%%a
   ) else (
      set !varname!=%%a
      set "varname="
   )
)

只要值没有逗号,分号,空格或等号,以前的方法就可以工作,除非它们用引号括起来。