@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?如果我删除数组元素并将其更改为纯文本,则会拆分很好。
答案 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
)
)