【问题标题】:Batch Scripting -- Creating variables based on input批处理脚本——根据输入创建变量
【发布时间】:2011-03-10 14:48:20
【问题描述】:

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

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

这里是sn-p的代码:

@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%)”部分。

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

【问题讨论】:

    标签: loops batch-file dynamic-variables


    【解决方案1】:

    像这样?

    @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
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 这个答案与乔治的答案大约在同一时间发布,并且非常接近相同的代码。感谢您花时间提供帮助!
      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多