Windowsbatch file – 分割string以设置variables

我觉得我正在用FOR循环选项圈选。

我试图采取一个string(输出一个命令),并将其拆分为逗号,然后使用每个值来设置,例如

string: USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234

所以我想分开逗号,然后从字面上在SET中使用该variables。 事先并不知道有多less变数。

我尝试过这样的事情:

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

但是在等号上也会分裂,所以我最终得到了

 USER Andy IP 1.2.3.4 

等等

我只是想能够做到以下,所以我可以SET USER=Andy等,如:

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

我错过了哪些选项或标志?

FOR命令(no /F选项)中元素的默认分隔符是空格,制表符,逗号,分号和等号,并且没有办法修改它,因此可以使用FOR /F命令来解决这个问题:

 @echo off set MYSTRING=USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234 :nextVar for /F "tokens=1* delims=," %%a in ("%MYSTRING%") do ( set %%a set MYSTRING=%%b ) if defined MYSTRING goto nextVar echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%PORT% 

解决此问题的另一种方法是首先获取变量名称,然后在常规FOR命令中为每对值执行赋值:

 setlocal EnableDelayedExpansion set varName= for %%a in (%MYSTRING%) do ( if not defined varName ( set varName=%%a ) else ( set !varName!=%%a set varName= ) ) echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%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%