批处理脚本 - 根据输入创建变量

时间:2011-03-10 14:48:20

标签: 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 %%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%)”部分。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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