В этой статье мы с вами рассмотрим vbscript циклы языка. VBScript использует циклы нескольких видов, которые, не являются уникальными и используются и другими языками программирования. Для справки, использование циклов нужно в том случае, когда нужно произвести определенное количество вычислений или просто, произвести перебор элементов, например, вывести список свойств определенного объекта. И так, в этой статье мы рассмотрим следующие циклы vbscript: for…next и for each…next, а также рассмотрим оператор exit for.
Хорошо, давайте рассмотри все типы vbscript циклов по порядку:
For…Next — Данный цикл vbscript требует задания начального и конечного значения (количество итераций), по умолчанию счётчик значений увеличивается на единицу, но это можно изменить с помощью дополнительного ключевого слова step (шаг). Общий синтаксис vbs цикла For…Next таков:
For счётчик=начало То конец [Step шаг]
тело цикла
[Exit For]
тело цикла
Next

Видим, что после ключевого слова For мы задаем начальное числовое значение, которое присваиваем переменной, после To прописывается конечное значение, за необязательным step следует шаг счётчика. VBScript циклы. Видно, что тело цикла vbscript в конце закрывается словом Next. В теле цикла прописываются нужные нам операторы (например, условный оператор if) и выражения, exit for отвечает за безусловный выход из цикла vbs. Хорошо, давайте рассмотрим два таких примера:
' ***************************************************************************** ' Использование цикла FOR NEXT ' Находим сумму чисел от 1 до 100 ' for_next.vbs ' ***************************************************************************** Option Explicit Dim summ, msg, i summ = 0 for i=1 to 100 summ=summ + i Next msg="Сумма чисел от 1 до 100: " & summ MsgBox msg |
VBScript циклы. Тут всё просто, мы просто задали диапазон от 1 до 100 и всё просуммировали, теперь рассмотрим второй пример:
' ***************************************************************************** ' Использование цикла FOR NEXT ' for_next_step.vbs ' ***************************************************************************** Option Explicit Dim summ, summ1, msg, i summ = 0 summ1 = 0 for i=100 to 1 step -2 ' получим 1068 summ=summ + i if summ>=1000 then exit for Next for i=1 to 100 step 2 ' получим 1024 summ1=summ1 + i if summ1>=1000 then exit for Next msg="Обратный цикл: " & summ &vbCrlf & "Прямой цикл:" & summ1 MsgBox msg |
В данном примере, мы использовали два vbscript цикла for, в обоих мы находим сумму, в середине прописано условие: если сумма будет больше-ровно 1000, то – выйти из вычисления. В первом цикле vbs мы использовали обратное суммирование – от 100 до 1, шаг уменьшается на 2, во втором – прямое вычисление, шаг увеличивается на два.
for each…next — Данная конструкция применяется для перебора элементов коллекции или массива. Коллекция, в языке программирования – практически тот же массив, но, количество элементов в нём не известно. В for each…next также можно использовать оператор exit for.

Следующий пример демонстрирует вывод элементов массива:
' ***************************************************************************** ' Использование for...each ' Перебор массива ' for_each.vbs ' ***************************************************************************** Option Explicit Dim MyArr(5), elem, s MyArr(0)=2 MyArr(1)="строка" MyArr(2)=6 MyArr(3)=-3 MyArr(4)=5 For Each elem In MyArr s = s & elem & vbCrLf Next MsgBox s |
Хорошо, теперь давайте рассмотрим пример, который выводит список каталогов диска D::
' ***************************************************************************** ' Использование for...each ' Перебор коллекции каталогов ' for_each_1.vbs ' ***************************************************************************** Option Explicit Dim FSO, Drive, Folders, Folder, s s="Список папок" & vbCrLf & vbCrLf ' создаем экземпляр объекта FileSystemObject Set FSO = CreateObject("Scripting.FileSystemObject") ' получаем доступ к диску D:\ Set Drive = FSO.GetFolder("D:\") ' получаем коллекцию папок Set Folders = Drive.SubFolders For Each Folder In Folders s = s & Folder.Name & vbCrLf Next MsgBox s |
Как видим, цикл vbscript for… each позволяет перебирать как элементы массива, так и элементы коллекции.