3

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

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

即用空格分隔的对序列,每对具有key=value的格式,其中value可以被引用。带引号的值可能包含空格。这种对的数量不是固定的 - 从 1 到任何合理的数字,取决于用户。

对于每一对,我都需要创建一个名为key的环境变量并为其赋值

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

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

这不起作用,因为它不仅由空格分割,而且由 = 仅给出单个标记的输出序列而不是 key=value 对:

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

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

请问这里有什么建议吗?

4

1 回答 1

5
@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="
   )
)

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

于 2013-10-16T19:15:12.907 回答