【问题标题】:Batch splitting an array element in nested loop在嵌套循环中批量拆分数组元素
【发布时间】:2015-03-13 14:38:24
【问题描述】:
@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?如果我删除数组元素并将其更改为纯文本,它会很好地分割。

【问题讨论】:

    标签: arrays loops sorting batch-file for-loop


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多