Здесь я попробую показать примеры скриптов, чтобы понятно было, что и откуда берется. Писать скрипты можно в блокноте, но это не совсем удобно. Я лично использую Notepad++. Это удобно. Запомнить все, и даже большую часть материала невозможно, поэтому я написал для себя небольшую шпаргалку. Если что — я знаю где искать. Пригодится )))
Структура скрипта
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
' === Script Information Header ( совсем необязательно ) === ' Script Name: ' название сценария; ' Date: ' дата изменения; ' Author: ' автор; ' Description: ' описание; ' === Initialization Block ( определяются глобальные переменные и константы )=== Option Explicit ' директива, запрещающая автоматическое создание ' переменных; Dim <Variable> ' объявление переменных; Dim <Array>() ' объявление массивов; Set <Object> ' подключение объектов; Sub Test( arg1, arg2 ...) ' какой-то код End Sub Function Test (arg1, arg2 ...) ' какой-то код End Function ' === Script Main Logic === ' тело сценария; ' === Functions and Procedures === |
Классическая схема скрипта. Но как всегда — есть нюансы. Процедуры и функции могут располааться как до так и после основной части скрипта.
VBScript процедуры и функции
Как и в большинстве языков программирования, в VBScript можно использовать процедуры и функции, которые позволят разделить код на логически отдельные подпрограммы и вызывать их, если нужно несколько раз.
Процедуры в VBScript
Написание процедуры начинается с ключевого слова Sub затем идет наименование процедуры, перечисление параметров в скобках. Затем идет программный код и заканчивается код ключевыми словами End Sub которые обозначают конец процедуры.
Параметры в процедуре перечисляются без указания их типа.
Вызов процедуры осуществляется одним из 2-х способов:
- Call <имя_процедуры> (Param1, Param2, Param3)
- <имя_процедуры> Param1, Param2, Param3
Если пишем просто имя процедуры для ее вызова, тогда параметры, передаваемые ей перечиаляются просто следом после названия через запятую. Если же процедура вызывается с помощью Call, тогда параметры нужно обязательно перечислять в скобках.
Передавать параметры в процедуру можно по ссылке и по значению, для чего перед именем параметра пишем:
- ByRef — передача параметра по ссылке (при изменении параметра внутри процедуры, исходная переменная, которая передавалась, так же будет изменена)
- ByVal — передача параметра по значению (создается копия значения и изменение параметра внутри процедуры не изменяет исходную переменную, которая передавалась в процедуру)
Таким образом, если нужно в подпрограмме получить и вернуть в основную программу несколько значений, можно использовать передачу параметров по ссылке.
Пример возвращения нескольких значений из процедуры:
Функции в VBScript
Написание функции начинается с ключевого слова Function, затем название функции, перечисление передаваемых в нее параметров, код самой функции и заканчивается ключевыми словами End Function обозначающими конец функции.
Для того чтобы функция вернула значения, последней строкой нужно написать название функции и присвоить ей возвращаемое значение, в противном случае, функция вернет пустой результат.
Пример функции возвращающей значение:
|
1 2 3 4 5 |
MsgBox Test(1, 2) ' Выведет 3 Function Test (arg1, arg2 ...) ' какой-то код End Function |
Функцию можно использовать как процедуру, при этом параметры в нее можно передавать по тем же правилам, что и для процедуры и точно так же можно использовать ByVal и ByRef для передачи параметров по значению и по ссылке (по ссылке передавать нужно в том случае, если ты хочешь получить несколько значений возврата, т.е. на глобальные переменные).
Если возможностей процедур и функций не достаточно, можно на VBScript написать классы.
Классы в VBS примеры
В языке VBS можно использовать классы, правда не в полной мере, т.к. нет механизмов наследования и полиморфизма.
Пример объявления и использования класса в VBS:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Class MyClass Private MyAttr Public Sub Test1() MsgBox "тест1" End Sub Public Function Test2() MsgBox "тест2" Test2 = "значение" End Function End Class Dim myobj Set myobj = New MyClass myobj.Test1() MsgBox "Test2 вернул " & myobj.Test2() |
В классах можно использовать конструкторы и деструкторы:
Конструктор вызывается при объявлении класса. Деструктор при разрушении класса, например, если присвоить переменной с классом другое значение. Деструктор так же будет вызван при завершении программы, если до этого класс еще не был разрушен.
Имитация наследования класса в VBS
Как было сказано выше, в VBS нет наследования классов, но ее можно имитировать. Для этого в классе-потомке нужно продублировать методы родительского класса, например, так:
Передача параметров в конструктор класса
Как было написано выше, в классах есть конструкторы и деструторы. Однако, есть ограничение их использования. В конструктор при инициализации нельзя передать никакие параметры. Обойти этот недостаток можно использовав вместо стандартного конструктора свой:
Контроль значений, передаваемых и возвращаемых в свойствах класса
При установлении или возвращении свойства класса можно предварительно выполнять различные действия по контролю их правильности или по их модификации. Осуществляется это с помощью Property Let и Property Get. Следующий пример это демонстрирует:
Включение в программный код других файлов (include)
Классы можно описывать в отдельных файлах, тем самым инкапсулируя (объединяя) логику и данные одного вида в отдельный класс-файл. Однако, встает проблема: как подключать эти файлы в общий программный код? Чтобы включить в код другой файл, можно воспользоваться executeGlobal и чтением файлов. Для демонстрации имитации include, ниже приведу текст двух файлов, по которым всё будет понятно.
Текст файла MainProgram.vbs (основная программа)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Call IncludeFile("MyClass.vbs") Dim myobj Set myobj = New MyClass myobj.Test1() MsgBox "Test2 вернул " & myobj.Test2() ' Функция для включения в код других файлов Sub IncludeFile(fname) executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fname).readAll() End Sub |
Текст файла MyClass.vbs (подключаемый файл с классом)
Циклы
| Call имя_событие | Call but_onclick | Вызов подпрограммы |
| Do . Loop Until условие |
Do a=a+1 Loop Until a>=5 |
Выполняет код хотя бы один раз, пока условие не будет истинным |
| Do . Loop While условие |
Do a=a+1 Loop While a =5 a=a+1 Loop |
Повторяет выполнение кода, пока условие не станет истинным |
| Do While условие . Loop |
Do While a 1 Then alert»больше» | Выполнение кода при выполнении условия |
| Select Case X Case значение1 действие Case значение2 действие2 . End select |
Select Case X Case 10 alert»x=10″ Case 20 alert»x=20″ End select |
Выборочное выполнение кода при совпадении значения |
Встроенные функции:
Они встроены в язык )))
MsgBox
В Таблице представлены некоторые константы, сумма которых определят вид «значка», а также наличие кнопки диалогового окна, создаваемого с помощью MsgBox.
|
Константа |
Значение |
Описание |
|
Группа 1 |
|
Появляющиеся кнопки |
|
VbOkOnly |
0 |
Кнопка Ok |
|
VbOkCancel |
1 |
Кнопки Ok и Cancel |
|
VbAbortRetryIgnore |
2 |
Кнопки Abort, Retry и Ignore |
|
VbYesNoCancel |
3 |
Кнопки Yes, No и Cancel |
|
… |
|
|
|
Группа 2 |
|
Появляющийся значок |
|
VbCritical |
16 |
Критический значок |
|
… |
|
|
|
Группа 3 |
|
Кнопка выбранная по умолчанию |
|
VbDefaultButton2 |
256 |
Вторая кнопка |
|
… |
|
|
|
Группа 3 |
|
Вывод на экран |
|
VbSystemModal |
4096 |
Окно выводится поверх всех открытых окон |
Полный список параметров доступен в Visual Basic Script Reference.Сумма значений констант может быть введена следующим образом:
VbYesNoCancel+VbCritical+VbDefaultButton2+VbSystemModal
Замечание: Если вы используете переменную для хранения информации о нажатой кнопке, то параметры, следующие после MsgBox обязательно заключить в круглые скобки, если нет – то скобки использовать не нужно.
Mexanik
Пример:
K=MsgBox( «Ответ», vbYesNoCancel+vbcritical+vbDefaultButton2+vbSystemModal, «привет»)
Если же значение нажимаемой кнопки не является важным, функцию следует вызывать следующим образом:
Msgbox «Ответ»,vbyesnocancel+vbcritical+vbdefaultbutton2+vbSystemmodal,»привет»
То есть нужно опустить скобки.
Перечень возвращаемых значений
|
Константа |
Значение |
Нажатая кнопка |
|
VbOk |
1 |
Ok |
|
VbCancel |
2 |
Cancel |
|
vbAbort |
3 |
Abort |
|
vbRetry |
4 |
Retry |
|
vbIgnore |
5 |
Ignore |
|
vbYes |
6 |
Yes |
|
vbNo |
7 |
No |
InputBox
Используется для ввода данных пользователем.
Синтаксис:
MyVar=InputBox(Текст [,Заголовок] [,Умолчание][,поз- X] [,поз- Y])
Текст – Необходимый параметр, определяющий сообщение, которое выводится в диалоговом окне.
Заголовок – Необязательный параметр, определяющий текст заголовка диалогового окна.
Умолчание – Необязательный параметр, задающий значение по умолчанию для текстового поля.
Поз-Х и поз-Y – Необязательные параметры, определяющие положение верхнего левого угла диалогового окна.
MyVar – переменная, в которую передается введённая пользователем строка.
Пример:
User_Input = InputBox (“Введите имя файла: ”, “Создать файл”, “NewFile”,100,200)
Замечание: Если необязательный параметр не задан, VBScript использует значение по умолчанию. Чтобы опустить необязательный параметр, надо оставить его место между двумя запятыми пустым.
Mexanik
Комментарии
Добавление комментариев к сценариям считается хорошим тоном. Действительно, с комментариями написанная программа становится более понятной и удобной, другими словами, более читабельной. Кроме того, если вы хотите заставить VBScript проигнорировать строку или часть оператора, можно просто закомментировать этот оператор. На VBScript комментарии помечаются одинарной кавычкой (‘) или оператором REM. Обнаружив этот символ, интерпретатор VBScript игнорирует остаток строки. Обе приведённые ниже строки содержат комментарии:
‘ Эта строка состоит из одного лишь комментария
MsgBox “Hello, World!” ‘ Комментарий в конце строки
Замечание: В одной строке можно вводить несколько операторов подряд, разделяя их двоеточиями (:). Однако не злоупотребляйте этой возможностью, иначе ваши программы станут нечитабельными.
Mexanik
Операции конкатенации:
В VBScript используются такие операции конкатенации строк, как + и &
Пример использования:
n=300 ‘ присваиваем переменной значение 300
‘ Функция CStr преобразует числовое значение переменной n в строковое, которое
‘можно сложить с другой строкой, а результат присвоить переменной s
s=CStr(n)+» лет Санкт-Петербургу!!!»
msgbox s ‘ выводим в диалоговом окне значение строки s
Конкатенация строк при помощи операции + не самая хорошая практика. Операция + складывает два операнда (если последние – строки, происходит операция конкатенации). Лучший подход – объединить строки при помощи операции &, так как при объединении операцией & двух значений разного формата VBScript автоматически преобразует типы без использования функции CSrc. Пример:
n=300
s=n&» лет Санкт-Петербургу!!!» ‘ Ошибка типов в данном примере не возникнет
msgbox s
Арифметические операции
возвращают переменной числовое значение. Примеры арифметических операций приведены в Таблице 5:
|
Операция |
Описание |
Пример |
|
^ |
Возведение в степень |
x=y^показатель |
|
+ |
Сложение |
x=a+b |
|
— |
Вычитание или знак отрицательного числа |
x=-30 или x=a-50 |
|
* |
Умножение |
x=a*40 |
|
/ |
Деление |
x=a/b |
|
\ |
Целочисленное деление |
x=a\b |
|
Mod |
Остаток от деления |
x=a Mod b |
Логические операции
возвращают переменной значение типа Bool. Примеры логических операций приведены в Таблице 6:
|
Операция |
Описание |
Пример |
|
Not |
НЕ |
x=Not y |
|
And |
И |
x=a And b |
|
Or |
ИЛИ |
x=a Or b |
|
Xor |
Исключающее ИЛИ |
x=a Xor b |
|
Eqv |
Эквивалентность |
x=a Eqv b |
|
Imp |
Импликация |
x=a Imp b |
Операции сравнения
служат для сравнения выражений (в которых могут быть числа, строки и т.д.). Смотри Таблицу 7.
|
Описание |
Пример |
|
|
= |
Равно |
a=b |
|
<= |
Меньше или равно |
a<=b |
|
>= |
Больше или равно |
a>=b |
|
<> |
Не равно |
a<>b |
Приоритет операций:
При вычислении значений выражений, состоящих из нескольких операций, синтаксический анализатор VBScript использует старшинство операций, которое приведено в Таблице 8. Чем меньше номер, тем больше приоритет.
|
Операторы |
Номер |
|
^ (возведение в степень) |
1 |
|
— (знак отрицательного числа) |
2 |
|
* |
3 |
|
/ |
4 |
|
\ |
5 |
|
Mod (остаток от деления) |
6 |
|
+ (сложение) |
7 |
|
— (вычитание) |
8 |
|
+ (конкатенация) |
9 |
|
& (конкатенация) |
10 |
|
=, >,<, >=, <=, <> |
11 |
|
And |
12 |
|
Or |
13 |
|
Xor |
14 |
|
Eqv |
15 |
|
Imp |
16 |
Замечание: приоритет у операций одинаков, они выполняются по порядку слева направо.
Mexanik
Понятие оператора
Оператор — это единица исполнения программы. Программы состоят из последовательности операторов. Операции сравнения приведены ниже:
|
Возвращает true тогда и только тогда, когда оба аргумента равны |
= |
|
Возвращает true тогда и только тогда, когда оба аргумента неравны |
<> |
|
Возвращает true тогда и только тогда, когда левый аргумент меньше правого |
< |
|
Возвращает true тогда и только тогда, когда левый аргумент больше правого |
> |
|
Возвращает true тогда и только тогда, когда левый аргумент меньше или равен правому |
<= |
|
Возвращает true тогда и только тогда, когда левый аргумент больше или равен правому |
>= |