cmd批处理-在usebackq中使用:将要分割的字符串从逗号分隔更改为空格分隔

问题描述 投票:0回答:1

我想读取一个包含数个(未终止数目的)Kafka主机的字符串,并使用cmd for在单独的行中列出它们。

字符串类似于:

host1:9092,host2:9092,host3:9092,...

我所拥有的是:

set /p BOOTSTRAPSERVERS="Bootstrap servers with port, separated by comma(by default localhost:9092): "
REM echo "%BOOTSTRAPSERVERS%"
if "%BOOTSTRAPSERVERS%"=="" set BOOTSTRAPSERVERS="localhost"

echo All the servers to connect: 
FOR /F "usebackq delims=," %%i in (`echo %BOOTSTRAPSERVERS%`) do (
    echo %%i
    echo.
)

但是,我只将所有主机放在一行中,并用空格隔开:

All the servers to connect:
host1:9092 host2:9092 host3:9092

为什么?

如果打开@echo on,则会看到此消息,这没有任何意义:

set /p BOOTSTRAPSERVERS="Bootstrap servers with port, separated by comma(by default localhost:9092): "
Bootstrap servers with port, separated by comma(by default localhost:9092): host1:9092,host2:9092,host3:9092

REM echo "host1:9092,host2:9092,host3:9092"

if "host1:9092,host2:9092,host3:9092" == "" set BOOTSTRAPSERVERS="localhost"

echo All the servers to connect:
All the servers to connect:

FOR /F "usebackq delims=," %i in (`echo host1:9092 host2:9092 host3:9092`) do (
echo %i
 echo.
)

(
echo host1:9092
 echo.
)
host1:9092

[如果仔细观察,当echo没有用双引号引起来时,%BOOTSTRAPSERVERS%会将字符串由逗号分隔成空格分隔。

如果用双引号引起来,输出将是:

"host1:9092

为什么?

是否有更好的方法用分隔符分割字符串?

batch-file cmd echo
1个回答
0
投票
@echo off
setlocal EnableDelayedExpansion

set "hosts=host1:9092,host2:9092,host3:9092,host4:4711"
(set LF=^
%=empty line=%
)

FOR %%L in ("!LF!") DO (
    FOR /F "tokens=1,2 delims=:" %%1 in ("!hosts:,=%%~L!") DO (
        echo Host: %%1 Value: %%2
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.