Язык VBScript (Visual Basic Script Edition) является урезанной версией языка Microsoft Visual Basic, поэтому для тех, кто программировал на Visual Basic или VBA, язык VBScript окажется очень знакомым.
В отличие от JScript, для сценариев VBScript в конце строки не нужно ставить точку с запятой. В случае необходимости написания одного оператора на нескольких строках в конце этих строк нужно ставить символ подчеркивания "_":
s = "Символьная " & _
"строка"
Комментарием в VBScript считаются все символы в строке, идущие после символа апострофа
Переменные в VBScript могут быть глобальными (доступными из любого места сценария) и локальными (область действия ограничивается блоком кода, в котором они определены). Все переменные VBScript имеют стандартный тип
Variant
. Объявляются переменные обычно с помощью ключевого слова
Dim
, например:
Dim MyVariable
По умолчанию переменные в VBScript можно предварительно не объявлять; для включения режима обязательного объявления переменных нужно вставить в самую первую строку сценария выражение
Option Explicit
.
Язык VBScript является регистро-независимым, т.е. имена
MyVariable
и
myvariable
представляют одинаковые переменные. При выборе имен переменных следует придерживаться следующих правил:
? имя переменной должно начинаться с буквы и не должно содержать символа "
,
".
? имя переменной не должно превышать 255 символов.
Значения переменным в VBScript присваиваются с помощью оператора "
=
". Например:
Dim MyVariable MyVariable = "Привет!"
Здесь мы объявили переменную
MyVariable
и записали в нее текстовую строку. Отметим, что далее в любом месте сценария мы можем присвоить переменной
, внутри этого типа имеется разделение на подтипы, описание которых приведено в табл. П2.1. Для преобразования переменных к определенному подтипу нужно использовать соответствующую функцию преобразования; такие функции также представлены в табл. П2.1.
Таблица П2.1. Подтипы данных
Подтип
Функция преобразования
Описание
Empty
—
Автоматически присваивается новым переменным, когда для них еще не определено явное значение
Null
—
Указывает на то, что переменная не содержит допустимых значений
Bool
CBool(x)
Используется для работы с логическими переменными, принимающим два допустимых значения:
true
или
false
Byte
CByte(x)
Содержит целые числа в диапазоне от 0 до 255
Integer
CInt(X)
Содержит целые числа в диапазоне от –32768 до 32768
Currency
CCur(x)
Специальный числовой формат для денежных величин
Long
CLng(x)
Содержит целые числа в диапазоне от -2147483648 до 2147483647
Single
CSngl(x)
Тип чисел с плавающей точкой одинарной точности
Double
CDbl(x)
Тип чисел с плавающей точкой двойной точности
Date/Time
CDate(x)
Содержит числа, соответствующие датам и времени от 1 января 100 года до 31 декабря 9999 года
String
CStr(x)
Символьный подтип данных. Текстовые строки в VBScript — это последовательность символов, заключенных в двойные кавычки
Object
—
Ссылка на объект
Error
—
Тип данных, предназначенный для хранения номеров ошибок
В переменную, которая была ранее объявлена с использованием ключевого слова
Dim
, можно записать ссылку на какой-либо объект. Делается это с помощью оператора
Set
, например:
Dim FSO
Set FSO=CreateObject("Scripting.FileSystemObject")
Здесь функция
CreateObject()
возвращает экземпляр объекта
FileSystemObject
, ссылка на который заносится в переменную
FSO
.
После того как ссылка на объект станет ненужной, переменную можно освободить с помощью ключевого слова
Пользовательские константы в VBScript объявляются с помощью ключевого слова
Const
, например:
Const MyConst="Это моя константа"
Кроме этого, VBScript поддерживает много встроенных именованных констант (их не нужно дополнительно объявлять в сценарии), применение которых упрощает использование различных внутренних функций (например,
MsgBox()
или
InputBox()
). Имена, значения и описания внутренних констант приведены в табл. П2.2–П2.9.
Таблица П2.2. Константы для обозначения цветов
Имя
Значение
Описание
vbBlack
&h00
Черный цвет
vbRed
&hFF
Красный цвет
vbGreen
&hFF00
Зеленый цвет
vbYellow
&hFFF
Желтый цвет
vbBlue
&hFF0000
Синий цвет
vbMagenta
&hFF00FF
Фиолетовый цвет
vbCyan
&hFFFF00
Бирюзовый цвет
vbWhite
&hFFFFFF
Белый цвет
Таблица П2.3. Константы для нумерации дней недели
Имя
Значение
Описание
vbSunday
1
Воскресенье
vbMonday
2
Понедельник
vbTuesday
3
Вторник
vbWednesday
4
Среда
vbThursday
5
Четверг
vbFriday
6
Пятница
vbSaturday
7
Суббота
Таблица П2.4. Константы для определения первого дня в неделе и первой недели в году
Имя
Значение
Описание
vbUseSystemDayOfWeek
0
Использовать для определения первого дня недели региональные настройки системы
vbFirstJan1
1
Первой неделей в году считается та, в которой было 1 января
vbFirstFourDays
2
Первой неделей в году считается та, в которой было по крайней мере четыре дня нового года
vbFirstFullWeek
3
Первой неделей в году считается первая полная неделя
Таблица П2.5. Константы для работы с датой и временем
Имя
Значение
Описание
vbGeneralDate
0
Дата и время выводятся в формате, определяемом региональными настройками системы
vbLongDate
1
Выводить дату, используя полный формат
vbShortDate
2
Выводить дату, используя краткий формат
vbLongTime
3
Выводить время, используя полный формат
vbShortTime
4
Выводить время, используя краткий формат
Таблица П2.6. Константы для диалоговых окон
Имя
Значение
Описание
vbOkOnly
0
Выводится кнопка OK
vbOkCancel
1
Выводятся кнопки OK и Отмена (Cancel)
vbAbortRetryIgnore
2
Выводятся кнопки Стоп (Abort), Повтор (Retry) и Пропустить (Ignore)
vbYesNoCancel
3
Выводятся кнопки Да (Yes), Нет (No) и Отмена (Cancel)
vbYesNo
4
Выводятся кнопки Да (Yes) и Нет (No)
vbRetryCancel
5
Выводятся кнопки Повтор (Retry) и Отмена (Cancel)
vbCritical
16
Выводится значок Stop Mark
vbQuestion
32
Выводится значок Question Mark
vbExclamation
48
Выводится значок Exclamation Mark
vbInformation
64
Выводится значок
Information Mark
vbDefaultButton1
0
По умолчанию в окне выбирается первая кнопка
vbDefaultButton2
256
По умолчанию в окне выбирается вторая кнопка
vbDefaultButton3
512
По умолчанию в окне выбирается третья кнопка
vbDefaultButton4
768
По умолчанию в окне выбирается четвертая кнопка
vbApplicationModal
0
Диалоговое окно выводится в модальном режиме
vbSystemModal
4096
Диалоговое окно выводится в модальном режиме и располагается сверху всех запускаемых приложений
Таблица П2.7. Результаты нажатия кнопок в диалоговых окнах
Имя
Значение
Описание
vbOk
1
Нажата кнопка OK
vbCancel
2
Нажата кнопка Отмена (Cancel)
vbAbort
3
Нажата кнопка Стоп (Abort)
vbRetry
4
Нажата кнопка Повтор (Retry)
vbIgnore
5
Нажата кнопка Пропустить (Ignore)
vbYes
6
Нажата кнопка Да (Yes)
vbNo
7
Нажата кнопка Нет (No)
Таблица П2.8. Константы для обозначения подтипов данных
Имя
Значение
Описание
vbEmpty
0
Переменная не инициализирована
vbNull
1
Переменная не содержит корректных данных
vbInteger
2
Переменная имеет подтип
Integer
vbLong
3
Переменная имеет подтип
Long
vbSingle
4
Переменная имеет подтип
Single
vbDouble
5
Переменная имеет подтип
Double
vbCurrency
6
Переменная имеет подтип
Currency
vbDate
7
Переменная имеет подтип
Date
vbString
8
Переменная имеет подтип
String
vbObject
9
Переменная имеет подтип
Object
vbError
10
Переменная имеет подтип
Error
vbBoolean
11
Переменная имеет подтип
Boolean
vbVariant
12
Переменная имеет подтип
Variant
(только для массивов переменных типа
Variant
)
vbDataObject
13
Объект доступа к данным
vbDecimal
14
Переменная имеет подтип
Decimal
vbByte
17
Переменная имеет подтип
Byte
vbArray
8192
Переменная является массивом
Таблица П2.9. Прочие константы
Имя
Значение
Описание
vbCr
Chr(13)
Возврат каретки
vbCrLf
Chr(13) & Chr(10)
Возврат каретки и перевод строки
vbFormFeed
Chr(12)
Перевод страницы
vbLf
Chr(10)
Перевод строки
vbNullChar
Chr(0)
Символ с нулевым кодом
vbNullString
Нулевая строка
Нулевая строка
vbTab
Chr(9)
Символ табуляции
vbVerticalTab
Chr(11)
Символ вертикальной табуляции
vbUseDefault
-2
Использовать значения по умолчанию из региональных настроек системы
vbTrue
-1
Логическое значение "истина"
vbFalse
0
Логическое значение "ложь"
vbObjectError
-2147221504
Определяет минимальное значение для номеров ошибок, задаваемых пользователем
Массивы в VBScript могут быть двух видов: статические (фиксированной длины) и динамические (переменной длины). Объявляются массивы, как и обычные переменные, с помощью ключевого слова
Dim
.
Для объявления статического массива нужно после его названия указать в круглых скобках наибольшее значение, которое может принимать индекс элемента в этом массиве, например:
Dim MyArr(10)
В языке VBScript (в отличие, например, от VBA) нумерация в массивах всегда начинается с нуля, поэтому объявленный выше массив
MyArr
будет содержать 11 элементов, обращаться к которым нужно следующим образом:
MyArr(0)="Это первый элемент"
MyArr(1)="Это второй элемент"
MyVar=MyArr(0)
Можно объявить двумерный массив, указав максимальные значения индексов для строк и столбцов соответственно, например:
Dim MyArr(5, 10) 'Массив из 6 строк и одиннадцати столбцов
При объявлении динамического массива его размеры в круглых скобках не указываются:
Dim MyArr()
Для использования динамического массива в сценарии применяется оператор
ReDim
, который определяет конкретную длину массива, например:
ReDim MyArray(10)
После этого к элементам динамического массива можно обращаться так же, как и к элементам обычного:
MyArr(0)="Это первый элемент"
MyArr(1)="Это второй элемент"
Отметим, что размеры динамического массива можно менять неоднократно (с помощью того же
ReDim
). Для сохранения при этом содержимого массива следует в операторе
Операторы отношения используются для сравнения значений двух переменных. Эти операторы, описанные в табл. П2.11, могут возвращать только логические значения
true
или
false
.
Таблица П2.11. Операторы отношения
Оператор
Условие, при котором возвращается
true
>
Левый операнд больше правого
>=
Левый операнд больше или равен правому
<
Левый операнд меньше правого
<=
Левый операнд меньше или равен правому
=
Левый операнд равен правому
<>
Левый операнд не равен правому
Также внутри условных операторов могут применяться логические операторы (табл. П2.12).
оценивается логическое условие (условие_1), стоящее после ключевого слова
If
. Если в результате оценки условия получилось значение
true
, то выполняется
выражение_1
и происходит выход из оператора. В противном случае начинают по очереди проверяться условия, стоящие после ключевых слов
ElseIf
; если одно из этих условий истинно, то выполняется соответствующее выражение, после чего управление передается следующему после End If оператору. Если ни одно из проверяемых условий не является истинным, выполняется выражение, стоящее после ключевого слова
Этот цикл может применяться в двух видах (с предусловием, которое проверяется до начала очередной итерации, и с пост-условием, которое проверяется после окончания итерации):
Do [While | Until] условие
тело цикла
[Exit Do]
тело цикла
Loop
или
Do
тело цикла
[Exit Do]
тело цикла
Loop [While | Until] условие
Если в цикле используется ключевое слово
While
, то итерации продолжаются до тех пор, пока
условие
равно
true
; если же применяется
Until
, то как только значением условия станет
true
, произойдет выход из цикла.
Оператор
Exit Do
позволяет выйти из цикла до завершения его итераций.
Пример использования цикла
Do…Loop
приведен в листинге П2.4. Листинг П2.4. Пример использования цикла
Do…Loop
Dim howFar 'Верхний предел для счетчика цикла
Dim sum(10) 'Массив из 11 элементов, индексы от 0 до 10
Режим обработки исключительных ситуаций в VBScript включается с помощью оператора
On Error Resume Next
. Если после этого при исполнении какою-либо оператора в сценарии произойдет ошибка времени выполнения, то управление передастся к следующему оператору в тексте.
Для анализа ошибок используется специальный объект
Err
, который содержит два свойства:
Number
— числовой код возникшей ошибки и
Description
— краткое описание этой ошибки.
В качестве примера приведем часть сценария, в которой происходит обработка исключительных ситуаций при подключении сетевого диска:
On Error Resume Next ' Включаем обработку ошибок времени выполнения
' Подключаем сетевой диск
WshNetwork.MapNetworkDrive Drive, NetPath
If Err.Numbero<>0 Then
Mess="Ошибка при подключении диска " & Drive & " к " & NetPath &_
Наиболее часто используемые функции, с помощью которых можно производить различные операции над символьными строками, описаны в табл. П2.15.
Таблица П2.15. Символьные функции
Функция
Описание
Asc(str)
Возвращает ASCII-код первого символа в строке
str
Chr(code)
Возвращает символ с ASCII-кодом
code
InStr([start,] str1, str2[, compare])
Возвращает индекс символа, с которого начинается первое вхождение подстроки
str2
в строку
str1
. Параметр
start
задает номер символа, с которого следует начинать поиск. Если этот параметр не задан, то поиск производится с начала строки. Поиск производится слева направо. Параметр
compare
задает режим сравнения при обработке строк (0 — двоичное, сравнение, 1 — текстовое сравнение)
InStrRev(str1, str2[, start[, compare]])
То же самое, что функция
InStr
, но поиск производится справа налево, т.е. возвращается номер последнего символа, с которого начинается вхождение подстроки
str2
в строку
str1
Join(list[,delim])
Возвращает строку, полученную в результате конкатенации подстрок, содержащихся в массиве
list
. Параметр
delim
задает символ, разделяющий подстроки (по умолчанию таким символом является пробел)
LCase(str)
Возвращает строку, в которой все алфавитные символы преобразованы к нижнему регистру
Left(str, len)
Возвращает
len
символов с начала строки
str
Len(str)
Возвращает число символов в строке
str
LTrim(str), RTrim(str), Trim(str)
Удаляет из строки
str
начальные, конечные или и те и другие пробелы соответственно
Mid(str, start[, len])
Возвращает из строки
str
подстроку, которая начинается с позиции
start
и имеет длину
len
. Если параметр
len
не указан, то возвращаются все символы, начиная с позиции
определяет число подстрок, которые будут обработаны таким образом (по умолчанию производятся все возможные замены). Параметр
compare
задает режим сравнения при работе со строками (0 — двоичное сравнение, 1 — текстовое сравнение)
Right(str, len)
Возвращает
len
символов с конца строки
str
Space(x)
Возвращает строку, состоящую из
х
пробелов
Split(Expr[, delim[, count[, compare]]])
Возвращает массив строк, полученных в результате разбиения строки
Expr
на подстроки. Параметр
delim
задает символ, разделяющий подстроки (по умолчанию таким символом является пробел). Параметр
count
определяет число подстрок, которые будут обработаны таким образом (по умолчанию в массив записываются все подстроки). Параметр
compare
задает режим сравнения при работе со строками (0 — двоичное сравнение, 1 — текстовое сравнение)
StrComp(str1, str2[, compare])
Возвращает число — результат сравнения строк
str1
и
str2
. Если
str1<str2
, то возвращается -1; если
str1=str2
, то возвращается 0; если
str1>str2
, то возвращается 1. Параметр
compare
задает режим сравнения при работе со строками (0 — двоичное сравнение, 1 — текстовое сравнение)
String(number, char)
Возвращает строку, состоящую из
number
символов
char
UCase(str)
Возвращает строку, в которой все алфавитные символы преобразованы к верхнему регистру
Для работы с датой и временем в VBScript имеется большой набор функций, основные из которых приведены в табл. П2.16.
Таблица П2.16. Функции для работы с датой и временем
Функция
Описание
Date
Возвращает текущую системную дату
DateAdd(interval, number, date)
Возвращает дату, отстоящую от даты
date
на
number
интервалов, заданных параметром
interval
, который может принимать следующие значения: "уууу" — год, "q" — квартал, "m" — месяц, "у" — день года, "d" — день, "w" — неделя, "ww" — неделя года, "h"— час, "m" — минута, "s" — секунда
В табл. П2.17 приведены функции, с помощью которых можно создавать новые массивы и получать сведения об уже имеющихся.
Таблица П2.17. Функции для работы с массивами
Функция
Описание
Array(arglist)
Возвращает значение типа
Variant
, которое является массивом, составленным из элементов списка
arglist
. Отдельные элементы в
arglist
должны быть отделены друг от друга запятой
IsArray(varname)
Возвращает
true
, если переменная
varname
является массивом, и
false
в противном случае
LBound(arrayname[, dimension])
Возвращает наименьшее значение, которое может принимать индекс в массиве
arrayname
. Параметр
dimension
определяет, для какой именно размерности массива мы ищем это наименьшее значение (1 для первой размерности, 2 для второй размерности и т.д.). По умолчанию
dimension
равно 1
UBound(arrayname[, dimension])
Возвращает наибольшее значение, которое может принимать индекс в массиве
arrayname
. Параметр
dimension
определяет, для какой именно размерности массива мы ищем это наибольшее значение (1 для первой размерности, 2 для второй размерности и т.д.). По умолчанию
При рассмотрении подтипов данных мы уже описывали функции конвертации, которые применяются для преобразования переменной к тому или иному подтипу (см. табл. П2.9).
В табл. П2.18 приведены функции, с помощью которых можно узнать, к какому подтипу принадлежит заданная переменная.
Таблица П2.18. Функции для работы с подтипами данных
Функция
Описание
IsArray(expr)
Возвращает
true
, если параметр
expr
является массивом, и
false
в противном случае
IsDate(expr)
Возвращает
true
, если параметр
expr
задает корректную дату (т. е. переменная expr является переменной подтипа
Выводит на экран диалоговое окно со строкой ввода и кнопками OK, Отмена и возвращает введенную в этом окне символьную строку. Параметр
prompt
задает сообщение, которое печатается перед строкой ввода;
title
определяет заголовок диалогового окна;
default
— значение, которое выводится по умолчанию в строку ввода. Параметры
xpos
и
ypos
определяют координаты левого верхнего угла окна. В случае необходимости элементам диалогового окна можно сопоставить контекстно-зависимую помощь. Параметр
Выводит на экран диалоговое окно с сообщением и различными кнопками и возвращает результат нажатия на одну из кнопок (возможные варианты возвращаемых функцией значений приведены в табл. П2.6). Параметр
prompt
задает сообщение,
title
определяет заголовок диалогового окна. Числовой параметр
buttons
определяет, какие именно кнопки должны быть представлены в окне (возможные значения этого параметра приведены в табл. П2.5). Параметры
helpfile
и
context
имеют то же значение, что и в функции
InputBox
Oct(number)
Возвращает восьмеричное представление (в символьном виде) числа
Для определения процедуры, т.е. подпрограммы, которая не возвращает никакого значения, в VBScript используется конструкция
Sub…End Sub
. После названия процедуры в круглых скобках указывается список ее параметров, например:
Sub MyProcedure(Param1, Param2)
Dim Sum
Sum = Param1+Param2
End Sub
Если процедура не имеет параметров, то в скобках после имени ничего указывать не нужно:
Sub MyProcedure()
…
End Sub
Вызывать процедуру из сценария можно двумя способами. Во-первых, можно просто написать имя нужной процедуры и указать через пробел список передаваемых параметров, например:
MyProcedure 3,10
Во-вторых, можно использовать специальный оператор
Call
, при этом список параметров обязательно должен быть заключен в круглые скобки:
Call MyProcedure(3, 10)
Для определения функции, т.е. подпрограммы, которая возвращает определенное значение, применяется конструкция
Function…End Function
. Как и при описании процедур, после названия функции в круглых скобках указывается список ее параметров, например:
Function MyFunction(Param1, Param2)
…
End Function
Для того чтобы возвратить из функции какое-либо значение, нужно внутри функции присвоить это значение переменной, название которой совпадает с именем функции:
Function MyFunction(Param1, Param2)
Dim Sum
Sum = Param1 + Param2
MyFunction = Sum
End Function
Если возвращаемое функцией значение не нужно присваивать никакой переменной, то функция вызывается так же, как и процедура — пишется имя этой функции и через пробел указывается список ее аргументов:
MyFunction 3, 5
Если же необходимо записать значение функции в какую-либо переменную, то аргументы функции заключаются в круглые скобки: