batch-file - cmd批处理 - usebackq in for:要拆分的字符串从逗号分隔更改为空格分隔
问题描述
我想读取一个包含多个(未终止的)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
将字符串从逗号分隔变为空格分隔,when%BOOTSTRAPSERVERS%
不是双引号。
如果是双引号,输出将是:
"host1:9092
为什么?
有没有更好的方法用分隔符分割字符串?
解决方案
要按标准分隔符(SPACE、TAB、逗号)分割字符串,可以使用普通for
循环(no /f
):
set "bootstrapservers=host1:9092,host2:9092,host3:9092"
for %%a in (%bootstrapservers%) do echo %%a
输出:
host1:9092
host2:9092
host3:9092
注意set
命令的语法(这样引号不会成为值的一部分)。相同的语法适用于set /p
:set /p "var=Prompt:"
推荐阅读
- python - 使用 BeatifulSoup 获取父标签与其第一个子标签之间的文本
- css - 如何在同一个可切换元素上使用两个苗条的过渡?
- vba - 主窗体和子窗体上的重复记录
- javascript - 如何在反应中有一组基于对象的路由?
- html - 如何在 :root 和全局变量中触发偏好颜色方案?
- sikuli - Sikulix : 比较网站的图像和屏幕
- angular - 如何避免expressJs中sendFile的Cors问题
- python - 在 Python 中使用 Pandas 跨多个工作表重命名列 (XLS)
- reactjs - UseEffect 挂钩不起作用或如何显示异步数据
- operating-system - 监视器:“在每个时间点,最多有一个线程可能正在执行它的任何方法。”