在嵌套循环中批量拆分数组元素

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
  )

)