Batch Scripting - Создание переменных на основе ввода - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь использовать пакетные сценарии для динамического создания и назначения переменных на основе разделенного пробелами списка имен компьютеров.

Имена компьютеров присваиваются% 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 ]

2 голосов
/ 10 марта 2011

Как это?

@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 голосов
/ 10 марта 2011

попробуйте

@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
...