0

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

计算机名称分配给 %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%)”部分。

这可以批量吗?这篇文章对我正在处理的项目并不重要,但它会通过在脚本的其他领域开辟一些新的可能性来增加价值。

4

2 回答 2

2

试试这个

@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
于 2011-03-10T15:24:06.447 回答
2

像这样?

@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
于 2011-03-10T15:24:37.433 回答