4

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

我正在尝试获取一个字符串(命令的输出)并将其拆分为逗号,然后将每个值用于 SET,例如

细绳:USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234

所以我想用逗号分割,然后在 SET 中使用该变量。我不提前知道会有多少变数。

我试过这样的事情:

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

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

USER
Andy
IP
1.2.3.4

ETC

我只想能够做以下事情,这样我就可以SET USER=Andy等等,比如:

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

我缺少什么选项或标志?

4

2 回答 2

15

FOR普通命令(无选项)中元素的默认分隔符/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%
于 2013-09-16T05:49:33.813 回答
1

如果您的输入类似于 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%
于 2014-07-15T08:07:28.333 回答