Loops 批处理脚本--基于输入创建变量

Loops 批处理脚本--基于输入创建变量,loops,batch-file,dynamic-variables,Loops,Batch File,Dynamic Variables,我正在尝试使用批处理脚本来创建和分配基于计算机名称的空格分隔列表的动态变量 计算机名分配给%hosts%(从生产脚本中的另一个文件中提取)。我试图完成的是计算被拉入的主机数量(它们由空格分隔),然后将每个主机分配给一个变量,该变量包含一个与主机列出顺序相关的数字 以下是代码片段: @echo off setlocal EnableDelayedExpansion SET hosts=10.10.0.0 192.168.0.0 W2K3-Server SET /a counter=0 FOR

我正在尝试使用批处理脚本来创建和分配基于计算机名称的空格分隔列表的动态变量

计算机名分配给%hosts%(从生产脚本中的另一个文件中提取)。我试图完成的是计算被拉入的主机数量(它们由空格分隔),然后将每个主机分配给一个变量,该变量包含一个与主机列出顺序相关的数字

以下是代码片段:

@echo off
setlocal EnableDelayedExpansion

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server
SET /a counter=0

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1
)

echo Total= !counter!

FOR /L %%A IN (1,1,!counter!) DO (
    FOR %%I in (%hosts%) DO (
        IF [!host%%A!]==[] SET host%%A=%%I
        echo host%%A= !host%%A!
    )
)

endlocal
此脚本的输出为:

Total= 3
host1= 10.10.0.0
host1= 10.10.0.0
host1= 10.10.0.0
host2= 10.10.0.0
host2= 10.10.0.0
host2= 10.10.0.0
host3= 10.10.0.0
host3= 10.10.0.0
host3= 10.10.0.0
我希望看到的结果是:

Total= 3
host1= 10.10.0.0
host2= 192.168.0.0
host3= W2K3-Server
我知道为什么我会得到第一个结果。不需要检查是否满足条件。在这种情况下,条件是将其中一个主机设置为变量。设置变量后,我需要知道如何退出循环的“FOR%%I in(%hosts%)”部分

可以批量生产吗?这篇文章对我正在进行的项目并不重要,但它将通过在脚本的其他领域中打开一些新的可能性来增加价值

试试这个

@echo off
setlocal EnableDelayedExpansion

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server
SET /a counter=0

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1
    set host!counter!=%%I
)

echo Total= !counter!

FOR /L %%A IN (1,1,!counter!) DO (
  echo host%%A = !host%%A!
)

endlocal
试试这个

@echo off
setlocal EnableDelayedExpansion

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server
SET /a counter=0

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1
    set host!counter!=%%I
)

echo Total= !counter!

FOR /L %%A IN (1,1,!counter!) DO (
  echo host%%A = !host%%A!
)

endlocal
像这样

@echo off
setlocal EnableDelayedExpansion

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server
SET /a counter=0

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1
    IF [!host%%I!]==[] SET host!counter!=%%I
)

echo Total= !counter!

FOR /L %%A IN (1,1,!counter!) DO (
    echo host%%A= !host%%A!
)

endlocal
像这样

@echo off
setlocal EnableDelayedExpansion

SET hosts=10.10.0.0 192.168.0.0 W2K3-Server
SET /a counter=0

FOR %%I IN (%hosts%) DO (
    SET /a counter+=1
    IF [!host%%I!]==[] SET host!counter!=%%I
)

echo Total= !counter!

FOR /L %%A IN (1,1,!counter!) DO (
    echo host%%A= !host%%A!
)

endlocal

这个答案和乔治的答案差不多是在同一时间发布的,并且非常接近同一个代码。谢谢你花时间帮忙!这个答案和乔治的答案差不多是在同一时间发布的,并且非常接近同一个代码。谢谢你花时间帮忙!