Windows批处理文件-拆分字符串以设置变量

Windows批处理文件-拆分字符串以设置变量,windows,for-loop,batch-file,delimiter,Windows,For Loop,Batch File,Delimiter,我觉得我在用FOR-loop选项兜圈子 我试图获取一个字符串(命令的输出)并用逗号将其拆分,然后使用每个值进行设置,例如 字符串:USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234 所以我想用逗号分开,然后在集合中使用这个变量。我不知道提前会有多少变量 我试过这样的方法: FOR %%L IN (%MYSTRING%) DO ECHO %%L 但它也在等号上分开,所以我最终得到了 USER Andy IP 1.2.3.4 等 我只想能够做到以下几点,

我觉得我在用FOR-loop选项兜圈子

我试图获取一个字符串(命令的输出)并用逗号将其拆分,然后使用每个值进行设置,例如

字符串:
USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234

所以我想用逗号分开,然后在集合中使用这个变量。我不知道提前会有多少变量

我试过这样的方法:

FOR %%L IN (%MYSTRING%) DO ECHO %%L
但它也在等号上分开,所以我最终得到了

USER
Andy
IP
1.2.3.4

我只想能够做到以下几点,这样我就可以
设置USER=Andy
等等,比如:

FOR %%L IN (%MYSTRING%) DO SET %%L

我缺少什么选项或标志?

命令(无
/F
选项)的纯
中,元素的默认分隔符是空格、制表符、逗号、分号和等号,无法修改,因此您可以使用
for/F
命令通过以下方式解决此问题:

@echo关闭
设置MYSTRING=USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234
:nextVar
对于/F“tokens=1*delims=,”%a in(“%MYSTRING%”)do(
设置%%a
设置MYSTRING=%%b
)
如果定义了MYSTRING,则转到下一个tvar
回显用户=%USER%,IP=%IP%,主机名=%HOSTNAME%,端口=%PORT%
解决此问题的另一种方法是首先获取变量名,然后在常规for命令中为每对值执行赋值:

setlocal EnableDelayedExpansion
设置变量名=
对于(%MYSTRING%)中的%%a,请执行以下操作(
如果没有定义varName(
set varName=%%a
)否则(
set!varName!=%%a
设置变量名=
)
)
回显用户=%USER%,IP=%IP%,主机名=%HOSTNAME%,端口=%PORT%

如果您的输入类似于HOSTNAME:PORT,并且需要拆分为单独的变量,那么您可以使用此

@echo off
set SERVER_HOST_PORT=10.0.2.15:8080


set SERVER_HOST_PORT=%SERVER_HOST_PORT::=,%

for /F "tokens=1* delims=," %%a in ("%SERVER_HOST_PORT%") do (
   set SERVER_HOST=%%a
   set SERVER_PORT=%%b
)

echo SERVER_HOST=%SERVER_HOST%
echo SERVER_PORT=%SERVER_PORT%