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

时间:2015-03-13 14:38:25

标签: arrays loops sorting batch-file for-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]”(行返回)“User:root:pw1 Pass:”但是我希望输出分割为“root” :pw1“所以输出看起来像”User:root Pass:pw1“。

为什么我的for / F没有将这个数组元素拆分为%% A和%% B?如果我删除数组元素并将其更改为纯文本,则会拆分很好。

1 个答案:

答案 0 :(得分:0)

在内部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
  )

)