我觉得我在用 FOR 循环选项兜圈子。
我正在尝试获取一个字符串(命令的输出)并用逗号分隔它,然后使用每个值来设置,例如
字符串:USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234
所以我想用逗号分隔,然后在 SET 中直接使用该变量。我不知道会有多少变数。
我试过这样的事情:
FOR %%L IN (%MYSTRING%) DO ECHO %%L
但是这也在等号上 split 所以我最终得到了
USER
Andy
IP
1.2.3.4
等等
我只想能够执行以下操作,这样我就可以SET USER=Andy
等等,比如:
FOR %%L IN (%MYSTRING%) DO SET %%L
我缺少什么选项或标志?
最佳答案
普通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%
关于Windows 批处理文件 - 拆分字符串以设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820913/