我觉得我正在用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%