我正在编写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>
请问这里有什么建议吗?
答案 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="
)
)
只要值没有逗号,分号,空格或等号,以前的方法就可以工作,除非它们用引号括起来。