在嵌套循环中批量拆分数组元素
Batch splitting an array element in nested loop
@echo off
set hosts[1]=192.168.1.1
set hosts[2]=192.168.1.2
set hosts[3]=192.168.1.3
set hosts[4]=192.168.1.4
set hostcreds[1]=root:pw1!
set hostcreds[2]=root:pw2!
set hostcreds[3]=root:pw3!
set hostcreds[4]=root:pw4!
for /L %%a in (1,1,4) do (
CALL ECHO Host: %%hosts[%%a]%%>>file%%a.txt
for /F "tokens=1,2 delims=: " %%A in ("%%hostcreds[%%a]%%") do (
CALL ECHO User: %%A Pass: %%B>>file%%a.txt
)
)
输出是 4 个名为 file1 到 4.txt 的文本文件,内容为 "Host: [host IP]"(第 return 行)"User: root:pw1 Pass:",但我希望输出拆分 "root:pw1" 所以输出看起来像 "User: root Pass: pw1".
为什么我的 for /F 没有将此数组元素拆分为 %%A 和 %%B?如果我删除数组元素并将其更改为纯文本,它会很好地拆分。
在内部 FOR
循环的命令中,使用 CALL
命令扩展数组值 在 处理结果之前。这样,值在被 FOR
分隔符分割之前被解析。通过这样做,您在编写凭据时不再需要 CALL
语句。
这是更新后的脚本:
@echo off
set hosts[1]=192.168.1.1
set hosts[2]=192.168.1.2
set hosts[3]=192.168.1.3
set hosts[4]=192.168.1.4
set hostcreds[1]=root:pw1!
set hostcreds[2]=root:pw2!
set hostcreds[3]=root:pw3!
set hostcreds[4]=root:pw4!
for /L %%a in (1,1,4) do (
CALL ECHO Host: %%hosts[%%a]%%>>file%%a.txt
for /F "tokens=1,2 delims=: " %%A in ('CALL ECHO %%hostcreds[%%a]%%') do (
ECHO User: %%A Pass: %%B>>file%%a.txt
)
)
@echo off
set hosts[1]=192.168.1.1
set hosts[2]=192.168.1.2
set hosts[3]=192.168.1.3
set hosts[4]=192.168.1.4
set hostcreds[1]=root:pw1!
set hostcreds[2]=root:pw2!
set hostcreds[3]=root:pw3!
set hostcreds[4]=root:pw4!
for /L %%a in (1,1,4) do (
CALL ECHO Host: %%hosts[%%a]%%>>file%%a.txt
for /F "tokens=1,2 delims=: " %%A in ("%%hostcreds[%%a]%%") do (
CALL ECHO User: %%A Pass: %%B>>file%%a.txt
)
)
输出是 4 个名为 file1 到 4.txt 的文本文件,内容为 "Host: [host IP]"(第 return 行)"User: root:pw1 Pass:",但我希望输出拆分 "root:pw1" 所以输出看起来像 "User: root Pass: pw1".
为什么我的 for /F 没有将此数组元素拆分为 %%A 和 %%B?如果我删除数组元素并将其更改为纯文本,它会很好地拆分。
在内部 FOR
循环的命令中,使用 CALL
命令扩展数组值 在 处理结果之前。这样,值在被 FOR
分隔符分割之前被解析。通过这样做,您在编写凭据时不再需要 CALL
语句。
这是更新后的脚本:
@echo off
set hosts[1]=192.168.1.1
set hosts[2]=192.168.1.2
set hosts[3]=192.168.1.3
set hosts[4]=192.168.1.4
set hostcreds[1]=root:pw1!
set hostcreds[2]=root:pw2!
set hostcreds[3]=root:pw3!
set hostcreds[4]=root:pw4!
for /L %%a in (1,1,4) do (
CALL ECHO Host: %%hosts[%%a]%%>>file%%a.txt
for /F "tokens=1,2 delims=: " %%A in ('CALL ECHO %%hostcreds[%%a]%%') do (
ECHO User: %%A Pass: %%B>>file%%a.txt
)
)