And*_*dyC 4 windows for-loop batch-file delimiter
我觉得我在使用FOR循环选项绕圈子.
我正在尝试获取一个字符串(输出命令)并将其拆分为逗号,然后使用每个值来设置,例如
串: USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234
所以我想在逗号上拆分,然后在SET中逐字地使用该变量.我不知道提前会有多少变量.
我尝试过这样的事情:
FOR %%L IN (%MYSTRING%) DO ECHO %%L
Run Code Online (Sandbox Code Playgroud)
但是这也是等号的分裂,所以我最终得到了
USER
Andy
IP
1.2.3.4
Run Code Online (Sandbox Code Playgroud)
等等
我只是希望能够做到以下所以我可以SET USER=Andy等,例如:
FOR %%L IN (%MYSTRING%) DO SET %%L
Run Code Online (Sandbox Code Playgroud)
我错过了哪些选项?
Aac*_*ini 15
plain 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%
Run Code Online (Sandbox Code Playgroud)
解决此问题的另一种方法是首先获取变量名称,然后在常规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%
Run Code Online (Sandbox Code Playgroud)