Файл сценария vbscript что это

Обновлено: 05.07.2024

Справочное руководство по VBScript

Примечание
Здесь и далее в тэгах HTML после открывающихся уголков < следует пробел, чтобы эти тэги не интерпретировались браузером, а просто отображались как текст HTML-кода.

VBScript является регистронезависимым языком (в отличие от JavaScript). Это означает, что изменение регистра символов (с прописных на строчные и наоборот) в имени переменной приводит к одной и той же переменной. Например, variable, Variable и vaRiabLe — одинаковые переменные.
Принципы программирования сценариев на VBScript такие же, что и на JavaScript. Однако имеются весьма заметные отличия в синтаксисе и наборах встроенных средств. Здесь мы не будем рассматривать VBScript столь же подробно, как JavaScript, а остановимся лишь наиболее важных, на мой взгляд, особенностях. Для тех, кто уже знаком с JavaScript, ниже приводится список основных особенностей VBScrip, отличающих его от JavaScriptt:

1. Ввод и вывод данных

Синтаксис с круглыми скобками для записи вызова функции MsgBox используется, чтобы присвоить возвращаемое значение произвольной переменной:

Первый параметр обязателен. Второй числовой параметр указывает, какая картинка и кнопки появятся в диалоговом окне.

Значения числового параметра, определяющего набор кнопок на панели, приведены ниже:

Значения числового параметра, определяющего картинку, приведены ниже:

Следующие две константы определяют режим работы диалогового окна:

Чтобы использовать одновременно несколько установок, необходимо просто сложить соответствующие значения числового параметра. Например, если требуется вывести картинку с вопросом и две кнопки Yes и No, то следует задать параметр 4 + 32 = 36.
Ниже показаны возвращаемые значения, которые присваиваются переменной intButtonClicked:

Выводит диалоговое окно с полем ввода данных и двумя кнопками ОК и Cancel (Отмена). Возвращает текст в поле ввода данных, если был щелчок на кнопке OK, или значение Empty, если был щелчок на кнопке Cancel. Возможны две формы вызова:
InputBox(подсказка, заголовок, исходное_значение, x, y)
InputBox подсказка, заголовок, исходное_значение, x, y

Подсказка представляет собой текст, выводимый внутри диалогового окна, исходный_текст — содержимое поля ввода при открытии окна, x и y — необязательные соответственно горизонтальная и вертикальная координаты относительно левого верхнего угла экрана монитора, измеряемые в твипах (1твип = 1/1440 дюйма). На рис. 13.2 показан пример диалогового окна.

2. Типы данных

Язык VBScript, как и JavaScript, является языком с так называемым свободным типом данных. Это означает, что переменная будет иметь тип, который определяется типом присваиваемого значения. При этом одна и та же переменная может иметь то один тип, то другой. Каким либо специальным образом тип переменной в тексте программы не объявляется. Обычно переменным присваиваются значения в виде строки символов, заключенных в двойные кавычки двойные или одинарные или числа (без кавычек). Внутреннее представление этих значений соответствует одному из следующих типов:

Типы данных в VBScriptt

Для преобразования данных из одного типа в другой служат специальные функции. Так например, числа можно хранить как данные одного из 6 типов. Однако не все эти типы равноценны с точки зрения точности представления чисел и занимаемого места в памяти. Если вы хотите преобразовать число 3.14 в целое, то тип Byte окажется более экономным, чем Integer. Для приведения числового значения переменной x к типу Integer используется функция Cint(x), а для приведения к типу Byte — функция CByte(x).
Примеры:

Значение Empty имеет объявленная переменная, которой еще не присвоено значение. Это значение ведет себя как 0 в операциях над числами и как пустая строка — в операциях над строками. Значение Empty нельзя присвоить с помощью оператора присваивания, оно назначается автоматически при создании переменной без присваивания ей начального значения.
Значение Null означает отсутствие допустимого значения. Переменная может получить его в результате некоторых операций над ней, в том числе и путем непосредственного присваивания ей этого значения. В отличие от Empty, значение Null можно присвоить переменной с помощью оператора присваивания.

В VBScript, в отличие от JavaScript, строковые значения заключаются только в двойные кавычки. Одинарные кавычки для этой цели не допускаются.

3. Переменные и операторы присваивания

Переменная является контейнером для хранения данных. Данные, сохраняемые в переменной, называют значениями этой переменной. Переменная имеет имя — последовательность букв, цифр и символа подчеркивания без пробелов и знаков препинания, начинающаяся обязательно с буквы или символа подчеркивания. Таким образом, имя переменной не должно начинаться с цифры или знака препинания.
Переменную можно объявить с помощью оператора Dim:
Dim имя_переменной

Переменная, объявленная с помощью оператора Dim, имеет значение Empty. Одним оператором Dim можно объявить несколько переменных, например,
Dim x, y, myvar

Вместе с тем, объявленная оператором Dim переменная, которой не присвоено конкретное значение, уже имеет значение Empty. Чтобы убедиться в этом, выполните следующий HTML-код:

Чтобы присвоить переменной значение, используют следующие выражения:
имя_переменной = значение
Let имя_переменной = значение
Set имя_переменной = значение

Оператор Let не является обязательным для присваивания значения переменной. Оператор Set используется для присваивания переменной ссылки на объект, в том числе и при создании нового объекта с помощью специальной функции CreateObject().

Вместо оператора Dim можно использовать операторы Private и Public для объявления соответственно локальных (частных) и глобальных переменных.

4. Массивы

Оператор Dim может использоваться не только для создания обычных переменных, но и для задания массивов. Массив может быть статическим (с постоянным количеством элементов) или динамическим (с заранее неопределенным количеством элементов). Массивы могут быть одномерными и многомерными (до 60 измерений). Одномерный статический массив определяется следующим образом:
Dim имя_массива(n)

Здесь n — количество элементов массива минус 1. Индексация элементов массива начинается с 0. Таким образом, число n в определении массива — индекс последнего элемента.
Многомерный статический массив задается аналогичным образом, но в круглых скобках через запятую указываются количества элементов минус 1 по каждому измерению. Например, следующий оператор задает двумерный массив из 8 строк и 3-х столбцов:
Dim myarray(7, 2)

Для получения значения элемента массива используется выражение вида:
имя_массива(индексы)

Например, для получения значения элемента двумерного массива myarray, находящегося в 3-й строке и 2-м столбце, можно воспользоваться таким выражением: myarray(2, 1).
В уже заданном статическом массиве нельзя изменить количество элементов и размерностей. В динамическом массиве, напротив, это можно делать сколько угодно раз. Динамический массив задается аналогично статическому, но в круглых скобках ничего не указывается:
Dim имя_массива()

Динамический массив отличается от статического тем, что позволяет устанавливать и изменять количество элементов в программе по мере необходимости. В случае многомерных массивов количество элементов можно изменить только для последнего измерения. После определения динамического массива можно использовать оператор назначения его длины (количества элементов):
Redim имя_массива(n)

Здесь n — количество элементов массива минус 1.

Если в программе изменяется длина массива, то значения его уже определенных элементов элементов могут быть потеряны.

Для сохранения значений динамического массива при изменении его длины используется ключевое слов Preserve (предохранить):
Redim Preserve имя_массива(n)

При работе с массивами, особенно динамическими, часто требуется знать их длину. Для этой цели служат две функции:
Lbound — возвращает наименьший индекс для данного массива
Ubound — возвращает наибольший индекс массива. Количество элементов всегда на 1 больше этого значения

В следующем примере длина существующего массива myarray увеличивается на 1 с сохранением всех его уже имеющихся значений:
Redim Preserve myarray(Ubound(myarray) + 1) /

5. Константы

Переменные, значения которых нельзя изменять, называются константами. Лучше сказать, что константы это именованные и неизменяемые значения.
Константа задается следующим оператором:
Const имя_константы = значение

Имя константы задается так же, как и имя переменной.
В VBScript имеется большое количество предопределенных констант, некоторые из них приведены ниже.

Константы системных цветов

6. Операторы

В программах на VBScript каждое выражение обычно размещается в отдельной строке и не завершается никаким специальным символом окончания. При необходимости расположить в одной строке несколько выражений последние разделяются двоеточием. Запись одного выражения (обычно очень длинного) можно перенести на другую строку. При этом используется знак продолжения — пробел и следующий за ним символ подчеркивания.
Примечание
В JavaScript одиночное выражение в одной строке можно завершать, а можно и не завершать точкой с запятой. Несколько выражений в одной строке разделяются точкой с запятой. При переносе записи выражения на другую строку знаки продолжения не предусмотрены.

6.1. Комментарии

Оператор комментария позволяет вставить в программу неинтерпретируемый текст, служащий лишь программисту. Он представляется одинарным апострофом (одинарной верхней кавычкой). Все, что расположено правее его, является комментарием, а не кодом программы. Комментарий может располагаться с начала строки или в строке с программным кодом, но правее его. Комментарии могут быть многострочными. В этих случаях каждая строка комментария должна начинаться с апострофа.

Примечание
В JavaScript для однострочных комментариев используются символы //, а для многострочных — /* … */

6.2. Арифметические операторы

Применение арифметических операторов к числовым данным подчиняется правилам математики. Однако они могут быть применены и к данным других типов. В частности, оператор сложения + для строковых данных выполняет их склейку, т.е. приписывает второй операнд к концу первого.

6.3. Операторы сравнения

Результатом вычисления элементарного выражения, содержащего оператор сравнения и операнды (сравниваемые данные), является логическое значение, то есть true или false. Так, если условие выполняется (верно, справедливо), то возвращается true. В противном случае возвращается false.

Обратите внимание, что операторы равенства и присваивания обозначаются одинаково. Интерпретатор VBScript различает их по контексту их применения в выражении.

Примечание
В JavaScript для оператора равенства используются два подряд следующих символа=, а для оператора присваивания — одинарный символ =

6.4. Логические операторы

Логические данные, обычно получаемые с помощью элементарных выражений, содержащих операторы сравнения, можно объединять в более сложные выражения. Для этого используются логические (булевские) операторы.

Логические выражения принимают значения True (Истина) или False (Ложь). Смысл первых трех операторов такой же как и операторов !, && и || в JavaScript . Действие остальных операторов можно выразить, используя булеву алгебру, через НЕ, И и ИЛИ следующим образом:

Примечание
В JavaScript нет операторов исключающего ИЛИ, эквивалентности и импликации. Однако нетрудно написать собственные функции, которые будут вычислять соответствующие выражения.

6.5. Строковые операторы

К строковым данным применим оператор склейки (конкатенации). В результате действия этого оператора к концу первой строки приписывается вторая строка. В качестве символа оператора склейки строк можно использовать + и &.

6.6. Операторы условного перехода

Оператор If
Оператор условного перехода if позволяет реализовать структуру условного выражения если …, то …, иначе …
Оператор If имеет несколько вариантов синтаксиса:
If условие Then выражение

If условие Then
выражения
End If

If условие-1 Then
[выражения-1]
[ElseIf условие-2 Then
[выражения-2]] …
[Else
[выражения-n]]
End If

Здесь квадратные скобки указывают лишь на то, что заключенные в них элементы синтаксической конструкции не являются обязательными. Обратите внимание, что блоков вида ElseIf может быть сколько угодно, в то время как блок вида Else может быть использован не более одного раза.

Оператор Select Case
Когда требуется вычислить значение выражения и сравнить его со значениями из заданных списков, удобно использовать оператор Select Case:
Select Case тестируемое_выражение
[Case список_значений-1
[выражения-1]]
[Case список_значений-2
[выражения-2]]

[Case список_значений-n
[выражения-n]]
[Case Else
[выражения-n+1]]
End Select

Здесь квадратные скобки указывают лишь на то, что заключенные в них элементы синтаксической конструкции не являются обязательными. Список значений может состоять из одного или нескольких элементов. В последнем случае они разделяются запятыми.
С помощью оператора Select Case вычисляется значение тестируемого выражения, которое последовательно сравнивается со значениями из списков блоков Case. Если значение тестируемого выражения совпадает с каким-нибудь значением из списка какого-нибудь блока Case, то выполняются выражения, соответствующие этому блоку. Если значение тестируемого выражения входит в несколько списков, то выполняются выражения самого первого блока Case. После выполнения выражений блока Case управление вычислительным процессом передается оператору, непосредственно следующему за End Select. Если ни один из списков значений, заданных в блоках Case, не содержит значения тестируемого выражения, то выполняются выражения блока Case Else (при его наличии). Если блок Case Else отсутствует, то управление передается оператору , непосредственно следующему за End Select.

Пример: Примечание
В JavaScript близким по смыслу к Select Case является оператор switch

6.7. Операторы цикла

Оператор цикла обеспечивает многократное выполнение блока программного кода до тех пор, пока не выполнится некоторое условие. В VBScript имеются несколько операторов цикла.

Оператор For … Next
Оператор цикла со счетчиком циклов имеет следующий синтаксис:
For счетчик=начальное_значение To конечное_значение [Step приращение]
выражения
Next

При выполнении этого оператора сначала переменной счетчик присваивается начальное значение. Если это значение не равно заданному конечному значению, то выполняются выражения, указанные в теле оператора цикла. В противном случае выражения не вычисляются, а управление передается оператору, непосредственно следующему за Next. Затем значение счетчика увеличивается на величину приращения, указанную после ключевого слова Step (если его нет, то на 1). Новое значение счетчика сравнивается с конечным значением и далее все повторяется описанным выше способом.

Оператор For Each … Next
Оператор For Each … Next позволяет организовать цикл по элементам массива или по объектам из некоторого множества, когда их количество заранее не известно. Этот оператор выполняет заданные выражения для каждого элемента из указанного множества. Он имеет следующий синтаксис:
For Each элемент In множество
выражения
Next

Параметр множество задает имя массива или коллекцию объектов. Параметр элемент — переменная, которая в процессе выполнения оператора цикла автоматически принимает в качестве значения ссылку на элемент массива или объект.
For . Next — выполняет часть кода заданное число раз. For Each . Next Statement — выполняет часть кода для всех элементов массива или коллекции. Оператор Do . Loop
Do . Loop — выполняет часть кода до тех пор, пока условие справедливо, или до тех пор, пока оно не станет выполняться (в зависимости от конструкции). Оператор While . Wend
While . Wend — выполнет блок кода, пока выполняется условие.

7.Функции

В VBScript есть некоторое количество функций, используемых для управления переменными и доступа к их значениям. Их можно разделить на несколько категорий: Для получения полного описания каждой функции можно воспользоваться, например, справочной системой приложения, в котом VBScript установлен.

Функции преобразования
Эти функции используются для преобразования значений переменных разных типов.

Содержание

Область применения [ ]

Скрипты на языке VBScript чаще всего применяются в следующих областях, использующих продукцию Microsoft:

Такой тип сценариев обычно используется для:

  • создания сложных сценариев;
  • использования объектов из других приложений и библиотек;
  • скрытия окон в ходе выполнения сценария;
  • шифрования логики сценария.

В основном VBS-сценарии применяются для обработки данных, управления системой, работы с учетными записями пользователей и компьютеров, взаимодействия с офисными приложениями, работы с базами данных и прочих сложных задач.

Правила языка [ ]

В Visual Basic работают следующие правила:

  • длина строки не ограничена;
  • Переменные [ ]

По умолчанию переменные в сценариях объявляются автоматически при первом использовании в теле скрипта, если это не запрещено директивой Option Explicit. Если же в начале сценария объявить директиву Option Explicit, то все переменные нужно определять заранее с помощью следующих конструкций:

Константы объявляются в начале сценария с помощью конструкции:

Тип переменной присваивается автоматически после внесения в неё первого значения. В Visual Basic существуют следующие типы данных:

В VBS-сценариях возможно использование массивов переменных, которые позволяют хранить списки, таблицы и даже более сложные конструкции. Одномерные массивы (списки) могут быть динамическими, то есть они позволяют изменять свой размер в ходе работы сценария. Все массивы объявляются командой Dim:

Объекты, их методы и свойства [ ]

VBScript, как и их родитель — язык Visual Basic, является объектно-ориентированным языком программирования, то есть основной концепцией является понятие объектов и классов

Класс — это тип, описывающий устройство объектов. Объект подразумевает под собой нечто, что обладает определённым поведением и способом представления, объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Все объекты, с которыми работает Windows Script Host, имеют методы и свойства. Чтобы обратиться к методу, необходимо указать объект, а через точку - метод с необходимыми параметрами.

Аналогичная ситуация со свойствами, но свойства можно как назначать, так и считывать в переменные и другие свойства, правда, следует учитывать тип данных переменных и свойств, иначе сценарий выдаст ошибку несовместимости типов данных.

VBS-скрипт - это мощное решение для автоматизации действий пользователя в системах семейства Windows. Такой тип сценариев обычно используется для:

  • создания сложных сценариев;
  • использования объектов из других приложений и библиотек;
  • скрытия окон в ходе выполнения сценария;
  • шифрования логики сценария.

В основном VBS-сценарии применяются для обработки данных, управления системой, работы с учетными записями пользователей и компьютеров, взаимодействия с офисными приложениями, работы с базами данными и прочих сложных задач.

В зависимости от языка сценария, содержания и шифрования встречаются такие типы скриптов:

  • vbs - Visual Basic Script
  • vbe - зашифрованный Visual Basic Script
  • js - Java Script
  • jse - зашифрованный Java Script
  • wsh - настройки скрипта
  • wsf - XML-интегрированный сценарий

В этой статье я буду рассматривать сценарии типа vbs.

Как уже было описано выше, сценарии не компилируются, а интерпретируются. То есть для обработки скрипта в системе должен присутствовать интерпретатор языка VBS, и таких интерпретатора в Windows есть даже две штуки: оконный WScript и консольный CScript - оба интерпритатора - это Windows Script Host (WSH).

По умолчанию все скрипты выполняются через WScript, то есть никаких настроек не требуется, но чтобы выполнить скрипт в окне консоли, необходимо запустить его через CScript, либо установить CScript как интерпретатор, используемый по умолчанию. Для этого в командной строке нужно выполнить следующее:

После чего все сценарии будут выполняться в режиме консоли. Возврат в оконный режим осуществляется следующей командой:

В Visual Basic работают следующие правила:

  • длина строки не ограничена;
  • регистр символов не учитывается;
  • количество пробелов между параметрами не учитывается;
  • строку команды можно разрывать, а на месте разрыва нужно вставлять символ " _ ";
  • максимальная длина имени переменной 255 символов;
  • комментарии обозначаются сиволом " ' ".

Рекомендуемая структура сценария:

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

По умолчанию переменные в сценариях объявляются автоматически при первом использовании в теле скрипта, если это не запрещено директивойOption Explicit. Если же в начале сценария объявить директиву Option Explicit, то все переменные нужно определять заранее с помощью следующих конструкций:

Константы объявляются в начале сценария с помощью конструкции:

Тип переменной присваивается автоматически после внесения в нее первого значения. В Visual Basic существуют следующие типы данных:

Данные можно проверять на соответствие типам, а так же переводить из одного типа в другой, если значения позволяют это сделать. Для операций над типами данных используются следующие команды:

Как было сказано выше, Visual Basic не накладывает строгих ограничений на имена переменных, но в то же время существуют рекомендации для названий переменных, чтобы в тексте сценария легко определять тип данных. Для этого перед именем переменной рекомендуется ставить условные символы, которые определяют тип переменной:

  • iValueName - числовые типы
  • sValueName - строковый тип
  • bValueName - логический тип
  • dValueName - дата
  • oValueName - объект
  • cValueName - константа
  • aArrayName - массив

В VBS-сценариях возможно использование массивов переменных, которые позволяют хранить списки, таблицы и даже более сложные конструкции. Одномерные массивы (списки) могут быть динамическими, то есть они позволяют изменять свою размерность в ходе работы сценария. Все массивы объявляются командой Dim:

Пример использования массивов

Прежде, чем пользоваться динамическим массивом, ему нужно указать текущую размерность с помощью команды ReDim, после чего массив можно переформировать в любом месте сценария, при этом либо очистить весь массив, либо сохранить старые значения ячеек командой Preserve:

Чтобы узнать размерность массива, обычно пользуются функцией UBound, которая будет рассмотрена ниже вместе с остальными функциями работы с данными.

Ни один полноценный сценарий не обходится без ветвлений, ветвления помогают выбрать верный путь при выполнении или невыполнении какого-то заложенного условия. Иными словами, ветвления реализуют логику сценария. В VBS-сценариях реализованы несколько механизмов ветвлений. Рассмотрим их по порядку.

Конструкция для одного действия, выполняемого по условию:

Конструкция для нескольких действий, выполняемых по условию:

Конструкция "развилка на несколько путей" (вариант сIf):

Во всех приведенных выше конструкциях применяется следующее правило: "Если выполняется условие <Condition>, то произвести список действий <Action>, которые расположеные под текущем блоком условия. Если текущее условие не выполняется, то перейти к списку действий <Action> под командой Else."

Конструкция "развилка на несколько путей" (вариант сSelect):

В данной конструкции работает правило: "Если значение переменной <Variable> равно значению <Significance>, то произвети список действий <Action> под этим значением, иначе перейти к проверке следующего значения <Significance>."

Для организации повторяющихся действий или перебора элементов массива обычно используются циклы. В VBS-сценариях организованы несколько видов циклов: обычный цикл, цикл с неизвестным количеством итераций, цикл по условию.

Обычный цикл организуется структурой For - Next, в аргументах которой задаются такие параметры как имя счетчика (<Counter>), начальное значение счетчика (<Start>), конечное значение счетчика (<Finish>) и, при необходимости, шаг счетчика (Step <StepSize>).

Если в процессе работы цикла потребуется прекратить перебор значений, то это можно сделать с помощью команды Exit For.

Цикл с неизвестным количеством итераций обычно применяется для перебора всех значений в коллекции объекта, когда не известна его размерность. Эта структура переберет все значения (<Variable>) массива, переданного как парамер цикла (<Array>).

Циклы с условиями применяются для обработки данных, при выполнении какого-то условия. Такие циклы бывают двух видов: с проверкой в начале цикла и с проверкой в конце.

Цикл, пока выполняется условие, с проверкой в начале

Цикл, пока не выполнится условие, с проверкой в начале

Как уже было сказано выше, условия можно ставить в конец цикла. В этом случае тело цикла будет выполнено как минимум один раз. Так же как и в обычных циклах, цикл с условием можно прервать командой Exit Do:

Чтобы работать с данными и строить свои процедуры и функции, разработчки Visual Basic уже позаботились об основе сценариев - базовых функциях. VBS-скрипты функции для работы с датами, строками и числами, а так же базовые процедуры ввода-вывода и процедуры работы с сетью. Давайте вкратце рассмотрим встроенные функции.

Функции обработки дат:

Функции обработки строк:

И, естественно, помимо упомянутых функций, сценарии поддерживают все простейшие математические и логические операции:

  • = - оператор присваивания;
  • + - сумма двух чисел;
  • - - вычитание двух чисел;
  • * - умножение двух чисел;
  • / - деление двух чисел;
  • \ - целочисленное деление двух чисел;
  • Mod - остаток от деления двух чисел;
  • ^ - возведение в степень;
  • & - соединение двух строк;
  • Is - сравнение двух объектов;
  • Eqv - сравнение двух выражений;
  • Not - логическая операция отрицания;
  • And - логическая операция конъюнкции;
  • Or - логическая операция дизъюнкции;
  • Xor - логическая операция исключения;
  • Imp - логическая операция импликации.

Очередность выполнения операций определяется как и во всех языках программирования: сначала выполняются операции в скобках, потом вычисляются функции, потом операции умножения и деления, следом идут сложение и вычитание, и завершают вычисление логические операции.

Сценарии, написанные на Visual Basic, позволяют определять пользовательские процедуры и функции и вызывать их из основной программы. Между процедурой и функцией практически нет никакого различия, разница заключется в логическом смысле этих подпрограмм: функции обычно используются для вычисления какого-то значения, а процедуры - для выполнения действий. Тем не менее и процедуры, и функции могут выполнять операции и передавать значения основной программе. Несмотря на это, все же не стоит забывать о предназначении этих подпрограмм: функции - для вычисления, процедуры - для действий.

Функция объявляется оператором Function, после которого следует название пользовательской функции, которое не должно совпадать ни с одним зарезервированным словом языка Visual Basic, далее указываются переменные, которые будут передаваться подпрограмме в качестве параметров - указание переменных в этой конструкции означает выделение ячеек памяти для переменных подпрограммы (объявление переменных для функции). В теле подпрограммы структура сценария ничем не отличается от обычной программы (здесь можно объявлять дополнительные переменные, поизводить операции, использовать другие функции и процедуры), в конце тела должен присутствовать оператор присвоения функции какому-то значению - это значение и будет возвращено основной программе. Прервать выполнение функции можно оператором Exit Function, но в этом случае нужно не забыть присвоить функции какое-то значение, иначе сценарий выдаст ошибку. Завершается функция оператором End Function.

Процедура определяется аналогично функции, но другим оператором -Sub. Так как процедура не возвращает основной программе никаких значений, то оператора присвоения перед выходом из процедуры нет. Прервать выполнение процедуры можно с помощью команды Exit Sub, а завершается вся конструкция оператором End Sub. Чтобы в основной программе вызвать процедуру, необходимо использовать ключевое слово Call и имя функции с необходимыми аргументами. (Ключевое словоCallне является обязательным, но я рекомендую его использовать чтобы избежать неправильных вызовов процедуры.)

Кстати, процедуры и функции должны располагаются в конце сценария.

Во время работы подпрограммы значения переменных основной части скрипта не изменяются, даже если в подпрограмме есть одноименные переменные. Чтобы подпрограмма имела возможность менять значения переменных основного сценария, необходимо в аргументах подпрограммы задать свойство переменных как ByRef. По умолчанию все переменные определяются со свойством ByVal.

В данном случае аргумент <Argument1> передается по ссылке на ячейку памяти - меняется значение переменной в основном сценарии. Иными словами, с помощью параметра ByRef процедура превращается в функцию - подпрограмма возвращает результат вычислений в основную программу.

По умолчанию все ошибки обрабатываются сценарием в автоматическом режиме, и, при возникновении ошибки, работа сценария останавливается. Для отключения автоматической обработки ошибок нужно использовать специальную директиву On Error Resume Next, которая отключает автоматическую обработку ошибок и продолжает работы сценария даже при их наличии. Для ручной обработки ошибок необходимо обратится к встроенному объектуErr, который хранит в себе статус ошибок. Объект Err имеет следующие свойства и методы:

Пример ручной обработки ошибки:

VBS-сценарии, как и их родитель - язык Visual Basic, является объектно-ориентированным языком программирования, то есть основной концепцией является понятие объектов и классов

Класс - это тип, описывающий устройство объектов. Объект подразумевает под собой нечто, что обладает определённым поведением и способом представления, объект - это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Итак, чтобы работать с объектом, его нужно сначала создать, используя классы из нужной библиотеки:

Удалить объект можно, присвоив ему значение Nothing:

Все объекты, с которыми работает Windows Script Host, имеют методы и свойства. Чтобы обратиться к методу, необходимо указать объект, а через точку - метод с необходимыми параметрами.

Аналогичная ситуация со свойствами, но свойства можно как назначать, так и считывать в переменные и другие свойства, правда, следует учитывать тип данных переменных и свойств, иначе сценарий выдаст ошибку несовместимости типов данных.

Пример. Создание объекта файловой системы, обращение к методу создания папки, удаление объекта.

Обратите внимание, что понятие "объект" относится к логике сценария, а не к логике файловой системы. То есть, когда мы говорим "удаление объекта", мы имеем ввиду логический объект сценария, который никак не влияет на удаление каких-то частей файловой системы.

Чтобы узнать, какие существуют библиотеки в Вашей операционной системе, включенные в библиотеки классы, их методы и свойства, можно воспользоваться проводником объектов, например из Microsoft Word:

  1. Запустить MS Word.
  2. В главном меню выбрать Tools -> Macro -> Visual Bacis Editor
  3. В окне редактирования макросов выбрать View -> Object Browser

Если какая-то библиотека не отражена в списке, то ее можно подключить через меню Tools -> References.

В сценариях есть методы, не входящие ни в какой класс, они доступны непосредственно в теле сценария:

Методы и свойства корневого класса WScript, не требуют создания объекта - они автоматически доступны для использования непосредственно в теле сценария.

Применение этих методов и свойств более подробно мы разберем в примерах других классов.

Для работы с операционной системой используется специальный класс Shell, который позволяет выполнять такие операции как запуск программ, изменение реестра, создание ярлыков, доступ к системным папкам и системным переменным, доступ к системному журналу. Итак, методы и свойства класса Shell:

Пример. Использование методов и свойств класса Shell.

Как мы уже убедились, VBS-сценарии могут работать с оболочкой Windows, но это не единственная их возможность. С помощью класса Network можно получить доступ к сетевым объектам и управлять ими. Давайте подребнее разберем класс Network:

Пример. Использование методов и свойств класса Network.

Очень часто в сценариях встречаются такие случаи, когда необходимо что-то создать, удалить, переместить или изменить на диске компьютера. Эту задачу позволяет решить класс FileSystemObject, предназначенный для работы с файловой системой. Ниже перечисленны объекты, которые может создать этот класс:

  • FileSystemObject - главный объект, который позволяет создавать, удалять, управлять дисками, папками и файлами в общем;
  • Drive - объект, позволяюший собирать информацию о дисках системы;
  • Drives - объект, хранящий в себе список дисков системы;
  • Folder - объект, позволяющий создавать, удалять, перемещать папки, а также собирать информацию о них и их содержимом;
  • Folders - объект, хранящий в себе список подпапок указанной папки;
  • File - объект, позволяющий создавать, удалять, перемещать файлы, а также собирать информацию о них;
  • Files - объект, хранящий в себе список файлов указанной папки;
  • TextStream - объект, позволяющий читать и создавать текстовые файлы.

Методы и свойства класса FileSystemObject (главного объекта):

Объекты Drives, Folders и Files класса FileSystemObject хранят в себе информацию о дисках, папках и файлах и, в основном, используюся для сбора информации о файловой системе. Они имеют только два свойства:

Чтобы было более понятно, что же такое коллекция объектов, рассмотрим пример вывода на экран списка файлов корня диска C:

Объект Drive предоставляет доступ к свойствам локального или сетевого диска:

Объект Folder предоставляет доступ ко всем свойствам папки, а также позволяет производить над ней действия:

Объект File аналогичен объекту Folder - он предоставляет доступ ко всем свойствам файла, а также позволяет производить над ним действия:

Объект TextStream - это инструмент доступа к содержимому файла. С помощью него можно читать и изменять файл:

Мы познакомились со всеми методами и свойствами класса FileSystemObject, рассмотрим пример использования этого класса:

Данный сценарий предназначен для очистки системы от устаревших файлов во временных каталогах Windows и профилях пользователей. В этом примере можно увидеть как работают практически все вышеописанные конструкции: структура сценария, название переменных, работа с массивами и коллекциями, ручная обработка ошибок, считывание системных переменных, создание текстового файла журнала работы сценария, работа с файловой системой, использование процедур.

Итак, мы познакомились с основами сценариев Visual Basic Script. Давайте подведем итог, и определим достоинства и недостатки таких сценариев:

Урок VBScript №1: Знакомство с языком VBScript

Приветствую тебя, читатель моего блога. Я начинаю свою серию уроков по программированию VBScript этой ознакомительной статьёй. Вам предстоит узнать основы основ данного языка программирования.

VBScript — Это скриптовый язык программирования. Как и любой другой скриптовый язык VBScript урезан в своих возможностях. Но то, что он урезан ещё не говорит что он не интересен.

Вступление

В этом уроке мы узнаем:

  • Основные особенности VBScript.
  • Что такое переменные и с чем их едят.
  • Простейшая функция MsgBox.

Язык VBScript на мой взгляд простой и понятный даже для ничего незнающего школьника. Сценарии VBScript можно создавать в простом блокноте, что облегчает нам с вами задачу, так как не надо скачивать каких либо дополнительных программ. Однако я рекомендую скачать бесплатную программу Notepad++. Он очень удобен тем, что подсвечивает сам код и показывает номера строк, что очень пригодится при возникновении ошибки.

Так же надо знать ещё две вещи о VBScript:

  • Расширение файла *.vbs
  • В коде не учитывается регистр (большие или маленькие буквы)

Приступим…

Создаём текстовый документ и сохраняем его с расширением *.vbs (Тип файла: все файлы. К названию файла подставить .vbs). Дальше открываем получившийся файл при помощи блокнота или любой другой программы для работы с текстом, например Notepad++. Вставляем код ниже, сохраняем и запускаем двойным щелчком мыши:

Теперь разберём эту «головоломку» по частям.

Первые три строки — это комментарии. Они не как не влияют на работу сценария. Что бы оставлять комментарии используется ключевое слово «Rem» или единичная клавиша ‘. Комментарии можно оставлять в любом месте кода, но надо учитывать, что после объявления комментария всё содержимое строки, которое идёт дальше, учитываться не будет.

На пятой строке перечислены все переменные, которые мы с вами будем использовать (a, b, c, d). Они бывают явными и не явными, но об это я расскажу попозже. Переменные объявляются ключевым словом «Dim».

С седьмой по десятую строку мы назначаем значение переменных. В данном случае это три числа и строка (10, 20, 40, «пробная срока»). Прошу обратить внимание, что все строки заключаются в ковычки.

На двенадцатой строке мы выводим значение всех переменных при помощи функции MsgBox. В данном примере у нас вылезет окошко с числом 10, а после нажатия кнопки «ОК» вылезет окошко с числом 20 и т.д. .

На мой взгляд, всё понятно, но мне не нравится чересчур большое количество строк. Давайте сократим код. Заодно я расскажу Вам про не явные переменные.

Итак, что мы видим? Наши три строки с функцией MsgBox превратились в одну. В данном случае язык VBScript позволяет прописать несколько операторов в одну строку используя двоеточие.

Теперь что касается не явных переменных. Такими являются все переменные которые не были назначены после ключевого слова «Dim». В данном случае таковой является переменная «f» на тринадцатой строке. Такие переменные не нарушают работу сценария, но если его код очень большой, то Вы можете попросту запутаться в своих переменных.

Для того что бы ни допустить этого, нам на помощь приходит оператор «Option Explicit» с пятой строки. Если данный оператор поставлен в вашем сценарии, то из-за не объявленных переменных будет выдавать ошибку, пока эту переменную не объявят после ключевого слова «Dim».

Так же я рекомендую писать значение всех переменных по возможности в одном месте и как можно выше к ключевому слову «Dim». Впрочем, я сам любитель пренебречь этим правилом =).

Вроде всё хорошо, но хочется чего то большего. Давайте выведем значение переменных одним окошком!

В данном примере у нас уже не выдаст ошибку, так как мы объявили переменную «f» после ключевого слова «Dim».

Теперь давайте рассмотрим три примера вывода значений переменных функцией MsgBox.

На пятнадцатой строке приведён пример где мы объединяем значение переменных при помощи знака «&». Значение переменных выведется одной строкой без пробелов. Думаю нам так не пойдёт, но это может пригодиться.

На шестнадцатой строке показан пример где значения переменных будут выведены одной строкой и разделены Tab’ом при помощи константы «vbTab» и всё того же связующего знака «&».

На семнадцатой строке мы видим вывод значения каждой переменной с новой строки. В этом нам помогает константа «vbCrLf».

Эти три строки так же можно объединить в одну при помощи двоеточия. Подробнее о функции MsgBox и других видах диалоговых окон я расскажу в одном из следующих уроков.

Надеюсь эта статья помогла снять завесу тайны с языка VBScript и вы заинтересовались этим чудесным языком программирования. Ждите новых уроков в которых Вы узнаете ещё много нового и интересного. Удачи! =)

Читайте также: