С этой статьей вы не научитесь программировать и даже не напишите как таковую программу, но найдете здесь отличные VBS скрипты и BAT файлы, которые без проблем напишете в обычном блокноте Windows, сможете усовершенствовать по своему, потом похвастаться перед друзьями и близкими. Возможно это поднимет вам настроение и вы отлично проведете время.
Большинство похожих скриптов пишутся для удобства и автоматизации каких-либо действий на компьютере с ОС Windows. Представленные же ниже скрипты мало окажутся полезными (может мне так кажется), но они отлично подойдут для первоначального знакомства с «кодингом». Вы отлично проведете время, удивив как себя, так и знакомых чайников (не программистов), плюс это еще один хороший вариант убить время за компьютером.
Немного терминологии:
- VBS — язык программирования для создания скриптов в ОС Windows, создается/редактируется в Блокноте Windows, имеет разрешение «.vbs». Думаю, продолжать не имеет смысла, ибо это мало о чем скажет, особенно новичкам. Интересующимся — статья в Википедии.
- BAT — пакетный файл, в народе просто «батник». Расширение файла «.bat». Дальше аналогично — статья в Википедии.
Данных расширений (vbs, bat) файлы создаются во всеми известном Блокноте Windows (Notepad). Для большего удобства создания скриптов рекомендуется использовать усовершенствованный (скажем так) блокнот — Notepad++. Он удобен подсветкой синтаксиса большого количества языков программирования, если вам это мало о чем говорит, то скачайте и пишите в нем — ошибок сделаете меньше в коде, ну или будет их проще найти, чем в том же мало функциональном Блокноте Windows.
Скачать Notepad++ можно на официальном сайте.
Для наглядности пример (слева — Блокнот Windows, справа — Notepad++):
Приступим
Если вы уже знакомы с VBS скриптами и батниками, то скорее всего нижеследующие примеры вам будут неинтересны, если же вы новичок, то для первоначального ознакомления — то, что нужно.
Научим компьютер здороваться
- Открываем Блокнот (или Notepad Plus Plus).
- Копируем в вставляем код:
Set sapi=CreateObject(«sapi.spvoice»)
sapi.Speak «Hello!» - Обязательное условие: кавычки должны быть “такими”, «ёлочки» не подойдут, скрипт не будет обрабатываться и выйдет ошибка. Вместо слова «Hello» можете написать что угодно, даже по русски, при наличии русского голосового движка.
- Дальше выбираем Файл — Сохранить как — Тип файла — Все файлы — название.vbs
- Называйте файл как хотите, но не забудьте в конце прописать расширение — .vbs (пример — Privet.vbs).
- Теперь пробуйте проверить свой скрипт — запустите файл двойным щелчок мыши.
Один нюанс: если вы прописали в кавычках слова русскими буквами, а при запуске произносится непонятно что, то у вас просто не установлен русский голосовой движок. Подробная установка и настройка голосового движка выходит за рамки нашей статьи, поэтому более подробно ознакомьтесь здесь и вновь возвращайтесь сюда.
Теперь, сделаем следующее: пропишем данный скрипт в автозагрузку, а это означает то, что при запуске компьютера вам будет произнесено написанное в программе слово (слова), если как в примере, то будет говорить — «Hello» при каждом включении компьютера. Как это сделать?
Все просто, программу (скрипт) добавить в автозагрузку можно таким же образом, то есть через такой же VBS скрипт. Создаем файл в блокноте, копируем/вставляем (Ctrl+C/Ctrl+V) следующий код:
Dim vOrg, objArgs, root, key, WshShell
root = «HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun»
KeyHP = «Program»
Set WshShell = WScript.CreateObject(«WScript.Shell»)
WshShell.RegWrite root+keyHP,»C:Privet.vbs /autorun»
Изменяем путь до скрипта «говорилки», вот эту строчку — C:Privet.vbs на свою. Прописываем где у вас лежит этот скрипт и как называется. Дальше сохраняем только что созданную мини программу в блокноте и запускаем. Все, теперь компьютер будет с вами здороваться пр каждом включении.
Открыть дисковод
- Открыть блокнот. Скопировать/Вставить следующий код:
Set a = CreateObject(«WMPlayer.OCX.7»)
Set b = a.CdromCollection
Set c = b.Item(0)
Set d = c.Eject
- Сохранить с расширением .vbs
- Запустить скрипт и откроется дисковод.
Есть более интересная модификация данного скрипта:
Set WMPlayer = CreateObject(«WMPlayer.OCX.7»)
do
WMPlayer.CdRomCollection.Item(0).Eject()
loop
В данном случае будет все время открываться-закрываться CD/DVD-привод, на ноутбуках в этом случае будет открываться после каждого его закрытия.
Внимание! Второй код (открытие-закрытие дисковода), некоторые антивирусы видят как вредоносную программу. Антивирус Касперского (в т.ч. и Kaspersky Free) его видит именно так и уничтожает сразу же. В первом же случае (просто открытие дисковода) для антивирусных программ не является вредоносным скриптом.
Чтобы прекратить автоматически открывать-закрывать дисковод необходимо:
- Запустить диспетчер задач (комбинация клавиш Windows — Ctrl+Alt+Del).
- Перейти на вкладку «Процессы».
- Найти процесс wscript.exe — правая кнопка мыши — завершить процесс.
Игра
Интересная находка из Сети — игра на VBS. Необходимо угадать число от 0 до 100. Скрипт автоматически при запуске задает (разгадывает) число, которое вам необходимо угадать и ввести в специальном окошке, при неправильном ответе даются подсказки, например меньше или больше.
Ниже тот самый код который необходимо скопировать и вставить в блокнот, далее сохранить (расширение .vbs).
Вы также можете изменять сообщения по своему, все что написано кириллицей без проблем редактируется. Не бойтесь сломать код. Поэкспериментируйте. В случае чего заново скопируйте рабочий код отсюда.
Set y = CreateObject(«Scripting.FileSystemObject»)
Set y = Nothing
Do
a = 0
u = 0
Randomize
Number = Int((RND*99)+1)
MsgBox «Я загадал число от 1 до 100, попробуй отгадать»,64,»Угадайка»
Do
a = a + 1
c = InputBox(«Угадай число» & vbCrLf & vbCrLf & «Попытка: » & a & vbCrLf & vbCrLf & «Чтобы посмотреть результаты введите число !» & vbCrLf & vbCrLf & «Для выхода оставьте поле пустым» & vbCrLf & vbCrLf,»Угадайка»)
If c = «!» Then CreateObject(«WScript.Shell»).Run «notepad C:WindowsResult.dll»,3,True : Exit Do
If c <> «» Then
If IsNumeric(c) = True Then
If CInt(c) < Number Then MsgBox «Нет,это не » & c & «. Я загадал число больше»,64,»Угадайка»
If CInt(c) > Number Then MsgBox «Нет,это не » & c & «. Я загадал число меньше»,64,»Угадайка»
If CInt(c) = Number Then
Set y = CreateObject(«Scripting.FileSystemObject»)
MsgBox («Количество попыток: » & a)
If MsgBox («Правильно, это было число » & c & «. Начать заного?»,36,»Угадайка») = 6 Then Exit Do Else WScript.Quit
End If
Else
MsgBox «Это не число!»,16,»Угадайка»
a = a — 1
End If
Else
a = a — 1
l = MsgBox («Ты ничего не ввел. Выйти из программы?»,36,»Угадайка»)
If l = 6 Then WScript.Quit
End If
Loop
loop
Ну и перед тем как переходить к батникам (.BAT) воспользуемся самым полезным VBS скриптом из всех перечисленных в этой статье.
Скрипт закрывающий wscript.exe
Сам скрипт:
Set TaskKill = CreateObject(«WScript.Shell»)
TaskKill.Run «TaskKill /f /im wscript.exe»
По сути он делает тоже самое, что чуть выше объяснялось в диспетчере задач, как например нельзя просто взять и закрыть надоедливый скрипт открывающий-закрывающий дисковод, а запустив данный скрипт все запущенные будут закрыты. Это как клин клином вышибают.
Немного познакомились с VBS скриптами и о том как их писать в блокноте, теперь рассмотрим несколько примеров использования BAT файлов (далее — батник).
Завершение работы /Перезагрузка компьютера
Совсем простой батник состоящий всего из одной строки.
- Открываем Блокнот.
- Пишем следующий код:
shutdown -s -t 1 -c -f
- Далее Файл — Сохранить как — нзвание.bat
- Обратите внимание на расширение файла, это уже не VBS скрипт, а батник, по этому в конце названия прописываем .bat (Пример compoff.bat).
- Запускаем только что созданный батник двойным щелчком мыши и компьютер выключится (Завершение работы).
Есть такой вариант кода:
shutdown -r -t 1 -c -f
Все также, прописываем в блокноте, сохраняем с расширением .bat и после запуска компьютер перезагрузится (обычная перезагрузка компьютера).
Удаление обновлений
Данный батник пригодится в том случае, если вы уже обновились до Windows 10. В чем суть? В этом батнике перечислены команды по удалению нескольких обновлений, как видно из названия — обновления телеметрии, или как раз одна из шпионских штучек системы, мы однажды уже говорили как отключить функции слежки Windows 10, в данном же случае вы просто создаете батник, в содержимое копируете код ниже и запускаете, после чего будут удалены перечисленные обновления.
@echo
echo
echo Step 1: Delete Updates Telemetry
wusa /uninstall /kb:3068708 /quiet /norestart
wusa /uninstall /kb:3022345 /quiet /norestart
wusa /uninstall /kb:3075249 /quiet /norestart
wusa /uninstall /kb:3080149 /quiet /norestart
Таким образом можно удалить абсолютно любое обновление, даже назойливое KB971033 которое проверяет копию Windows 7 на подлинность.
В Интернете встречается много различных скриптов, якобы безвредных, но будьте осторожны, прежде чем пробовать непонятно какой скрипт, некоторые из них могут навредить, например — вносить изменения в реестр, а в случае каких ошибок система будет выдавать ошибки, в таком случае придется или восстанавливать реестр Windows или сделать восстановление системы.
Загрузить PDF
Загрузить PDF
VBScipt очень простой, но мощный язык программирования, который является родным для Windows. Он используется, главным образом, для создания веб-серверных приложений. VBScript встраивается в файлы HTML и является достаточно простым и прямолинейным. Обратите внимание, что VBScript отличается от Visual Basic, который используется для программирования для ПК.
-
1
Выберите хороший редактор кода. Разумеется, вы можете использовать Блокнот, но удобнее будет пользоваться специальным редактором с подсветкой синтаксиса языка VBScript.
-
2
Установите Internet Explorer. Internet Explorer является единственным браузером, который поддерживает VBScript, поскольку является продуктом Microsoft. Чтобы увидеть VBScript в действии, вам будет необходимо установить Internet Explorer.
- Поскольку Internet Explorer поддерживается только ОС Windows, лучше всего, если вы будете программировать на компьютере с ОС Windows.
-
3
Изучите основы языка VBScript. Есть несколько важных основ языка, которые будет полезно знать прежде, чем начать углубляться в программирование.
- Используйте ‘ (апостроф) для обозначения комментариев. Любая строка, начинающаяся с апострофа, рассматривается как комментарий и не обрабатывается скриптом. Использование комментариев помогает другим разработчикам и вам самим разобраться в том, что делает данный код.
- Используйте _ (нижнее подчеркивание), чтобы продолжить строку. Обычно конец строки обозначается просто переходом на следующую, но если она оказывается слишком длиной, вы можете просто использовать _ в конце незаконченной строки для обозначения того, что текущая строка продолжается на следующей строке.
Реклама
-
1
Создайте HTML страницу. VBScript существует в пределах HTML сайтов. Чтобы увидеть, как работает ваш VBScript, вам понадобится создать HTML-файл и отрыть его в Internet Explorer. Откройте редактор кода и введите следующий код:[1]
<html> <head> <title>VBScript Test</title> </head> <body> </body> </html>
-
2
Добавьте тэги VBScript. Создавая страницу с кодом VBScript, вам необходимо передать браузеру информацию о том, что далее идет скрипт. Вставьте в свой код такой HTML-тэг:
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> </script> </body> </html>
-
3
Используйте VBScript на сервере ASP. Если вы пишете скрипт VBScript для ASP-сервера, указать то, что далее начинается скрипт, вы можете при помощи специального тэга:
<html> <head> <title>VBScript Test</title> </head> <body> <% %> </body> </html>
Реклама
-
1
Вставьте команду Write. Эта команда отображает для пользователя содержимое. Когда вы используете эту команду, в браузере будет отображен назначенный текст.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> document.write() </script> </body> </html>
-
2
Добавьте текст, который должен быть отображен. В скобках добавьте текст, который необходимо отобразить на экране. Текст должен быть заключен в кавычки, чтобы обозначить его как строку.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> document.write("Hello World!") </script> </body> </html>
-
3
Откройте HTML файл в браузере. Сохраните код в формате .HTML. Откройте получившийся файл при помощи Internet Explorer. На странице простым текстом должно отобразиться Hello World!.
Реклама
-
1
Объявите переменные. Переменные позволяют хранить данные, с которыми вы сможете работать позже. Объявить переменные необходимо при помощи команды dim прежде, чем присвоить им какие-либо значения. Вы можете объявить несколько переменных сразу. Переменные должны начинаться с буквы и могут содержать до 255 символов латиницы и цифр. В нашем примере объявим переменную «age»:
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> dim age </script> </body> </html>
-
2
Присвойте переменным значения. Теперь, когда переменная объявлена, вы можете присвоить ей значение. Используйте знак равенства =, чтобы задать значение переменной. Вы можете использовать команду Write, чтобы отобразить переменную на экране и удостовериться в том, что все работает.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> dim age age = 30 document.write(age) </script> </body> </html>
-
3
Манипулирование переменными. Для работы с переменными вы можете использовать все математические операции. Эти операции записываются так же, как и любые математические операции. Все ваши переменные, включая те, в которые будет записываться результат всех манипуляций, должны быть предварительно объявлены.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> dim x dim y dim sum x = 10 y = 5 sum = x + y document.write(sum) 'the page will display "15" </script> </body> </html>
-
4
Создайте массив. Массив, по существу, представляет собой таблицу (строку), которая содержит более одного значения. Массив обрабатывается как одна переменная. Как и другие переменные, массивы тоже необходимо объявлять. Вы также должны указать количество переменных, которые могут храниться в массиве. Обратите внимание, что нумерация массива начинается с 0. Позже вы сможете обращаться к данным из массива.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> Dim names(2) Dim mother names(0) = "John" names(1) = "Jane" names(2) = "Pat" mother = names(1) </script> </body> </html>
-
5
Создайте двухмерный массив. Вы также сможете создавать многомерные массивы, чтобы хранить большее количество данных. Объявляя массив, вы будете должны указать количество рядов и столбцов, которые он содержит.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> Dim table(2,2) 'This will create a 3x3 table table(0,0) = "A" table(0,1) = "B" table(0,2) = "C" table(1,0) = "D" table(1,1) = "E" table(1,2) = "F" table(2,0) = "G" table(2,1) = "H" table(2,2) = "I" </script> </body> </html>
Реклама
-
1
Узнайте разницу между процедурами и «sub» и «function». В VBScript существует два вида процедур: sub (подпрограммы) и function (функции). Эти два типа процедур позволяют вашей программе производить определенные действия.[2]
- Процедуры Sub могут осуществлять действия, но не могут возвращать в программу значения.
- Процедуры Function могут вызывать другие процедуры, а также возвращать значения.
-
2
Напишите процедуру sub и вызовите ее. Вы можете использовать подпрограммы (sub), чтобы создавать задачи, которые ваша программа может вызвать позже. Используйте Sub и End Sub, чтобы добавить подпрограмму. Используйте Call, чтобы активировать подпроцедуру
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> Sub mysubproc() document.write("This was written in a sub procedure") End Sub Call mysubproc() 'This will display the message written in the sub procedure </script> </body> </html>
-
3
Создайте процедуру function. Функции позволяют выполнять простые команды и возвращать программе значения. Процедуры-функции и формируют основу и функциональность вашей программы. Используйте Function и End Function, чтобы обозначить содержимое функции.
<html> <head> <title>VBScript Test</title> </head> <body> <script language="vbscript" type="text/vbscript"> Function multfunction(x,y) multfunction = x*y End Function document.write(multfunction(4,5)) 'This will use your function and insert 4 and 5 into the x and y variables. 'The result will be printed on the screen. </script> </body> </html>
Реклама
Источники
Об этой статье
Эту страницу просматривали 15 981 раз.
Была ли эта статья полезной?
В этом начальном уроке, мы изучим синтаксис vbscript языка. Синтаксис языка vbscript является таким же как и в языке Visual Basic и фактически, является подмножеством данного языка программирования. Основной упор в использовании vbscript – это возможность написания сценариев (расширение vbs) с открытым кодом для платформы Windows. Пользователю не нужно прибегать к установке дополнительного программного обеспечения, так как все сценарии выполняются под управлением сервера сценариев Windows Script Host.
И так, давайте рассмотрим базовый синтаксис vbscipt и его возможности.
- Комментарии – для комментирования строк кода можно использовать ключевое слово REM, или одинарную кавычку (‘).
- Строки кода – что бы произвести перенос одной строки на несколько, используется символ подчёркивания.
- Переменные – для объявления переменных используется ключевое слово Dim. Более детально, работу с ними я рассмотрел в статье «Урок 2 по VBScript: Переменные«
Можно прописать несколько операторов в одну строчку, для этого используется знак двоеточия (:). Сам язык нечувствителен к регистру символов.
Хорошо, давайте рассмотрим синтаксис языка vbscript на таком примере:
'****************************************REM Общий синтаксис vbscriptREM primer_1.vbs'**************************************** dim a, b, c a = "строка"b = 100c = 22.5 MsgBox a:MsgBox b:MsgBox c
Видим, что тут, мы вначале прописали комментарии, далее объявили три переменные. Как видим, язык vbscript не требует назначения типа данных (более детально, работу с типами данных я рассмотрел в статье – «Урок 3 по VBScript: Типы данных«). В конце, для вывода данных мы использовали функцию MsgBox, в данном случае она прописана в упрощенном варианте. Давайте рассмотрим ее полный синтаксис:
MsgBox(prompt[, buttons] [, title ][, helpfile, context ] ) – видим, что тут, функции передаются пять параметров, последние два мы рассматривать не будет, так как они не являются актуальными и практически не применяются.
- prompt – собственно, сообщение, которое надо вывести
- buttons – позволяет задать дополнительные кнопки, их значения указываются через константы
- title – заголовок окна
Работу с данной функцией я более детально рассмотрел в статье «Создание диалоговых окон«.
Язык vbscript предоставляют также функции для работы со строками и датой, а также, ряд математических функций.
Конечно, синтаксис vbscript позволяет пользователю создавать собственные процедуры и функции. Для определения процедуры, т. е. подпрограммы, которая не возвращает никакого значения, в VBScript используется конструкция Sub … End Sub. После ключевого слова Sub идёт имя процедуры, а в круглых скобках указывается список её параметров, например:
Sub MyProcedure(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 = Paraml+Param2
MyFunction = Sum
End Function
Если возвращаемое функцией значение не нужно присваивать никакой переменной, то функция вызывается так же, как и процедура — пишется имя этой функции и через пробел указывается список ее аргументов: MyFunction 3,5
Если же необходимо записать значение в какую-либо переменную, то аргументы функции заключаются в круглые скобки.
Вот простой пример синтаксиса vbscript для использования собственных процедур и функций:
'****************************************REM Общий синтаксис vbscriptREM primer_2.vbs'**************************************** dim a, b, c' пользовательская функцияFunction my_fun(a, b) Dim Summ Summ = a+b my_fun = SummEndFunction ' пользовательская процедураSub my_sub(a, b) Dim Summ Summ = a+b MsgBox SummEndSub MsgBox my_fun(5,10)Call my_sub(100,200)
Помимо процедур и функций, можно создавать собственные массивы (Урок 9 по VBScript: Массивы) и классы (Урок 8 по VBScript: Объекты и классы)
Ну что же, вдобавок, хотелось бы упомянуть две очень полезные функции:
- Hex(number ) – функция позволяет получить 16-ричное значение для числа number
- Oct(number) — функция позволяет получить 8-ричное значение для числа number
Смотрим на третий пример:
'****************************************REM Общий синтаксис vbscriptREM primer_3.vbs'****************************************dim my_var my_var = 200 MsgBox Hex(my_var):MsgBox Oct(my_var)
Опубликовано: 24.02.2010
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке
…продолжение
- Visual Basic Script
- Зачем нужны VBS-скрипты
- Основные положения
- Переменные
- Ветвления по условию
- Циклы
- Встроенные функции
- Пользовательские функции
- Обработка ошибок выполнения сценария
- Объекты, их методы и свойства
- Методы и свойства корневого класса WScript
- Методы и свойства класса Shell
- Методы и свойства класса Network
- Методы и свойства класса FileSystemObject
- Сценарий «Удаление старых файлов»
VBS-скрипт — это мощное решение для автоматизации действий пользователя в системах семейства Windows. Такой тип сценариев обычно используется для:
- создания сложных сценариев;
- использования объектов из других приложений и библиотек;
- скрытия окон в ходе выполнения сценария;
- шифрования логики сценария.
В основном VBS-сценарии применяются для обработки данных, управления системой, работы с учетными записями пользователей и компьютеров, взаимодействия с офисными приложениями, работы с базами данными и прочих сложных задач.
В зависимости от языка сценария, содержания и шифрования встречаются такие типы скриптов:
- vbs — Visual Basic Script
- vbe — зашифрованный Visual Basic Script
- js — Java Script
- jse — зашифрованный Java Script
- wsh — настройки скрипта
- wsf — XML-интегрированный сценарий
В этой статье я буду рассматривать сценарии типа vbs.
Сценарии обычно редактируются в блокноте Windows, но я рекомедую использовать Notepad2, который подсвечивает ключевые слова языка Visual Basic и помогает форматировать тело сценария. Итак, vbs-сценарий — это обычный текстовый файл с именем *.VBS, который легко править в блокноте, а запускать на исполнение — двойным щелчком мыши или вызовом по имени в консоли.
Как уже было описано выше, сценарии не компилируются, а интерпретируются. То есть для обработки скрипта в системе должен присутствовать интерпретатор языка VBS, и таких интерпретатора в Windows есть даже две штуки: оконный WScript и консольный CScript — оба интерпритатора — это Windows Script Host (WSH).
По умолчанию все скрипты выполняются через WScript, то есть никаких настроек не требуется, но чтобы выполнить скрипт в окне консоли, необходимо запустить его через CScript, либо установить CScript как интерпретатор, используемый по умолчанию. Для этого в командной строке нужно выполнить следующее:
CScript //H:CScript
После чего все сценарии будут выполняться в режиме консоли. Возврат в оконный режим осуществляется следующей командой:
CScript //H:WScript
В Visual Basic работают следующие правила:
- длина строки не ограничена;
- регистр символов не учитывается;
- количество пробелов между параметрами не учитывается;
- строку команды можно разрывать, а на месте разрыва нужно вставлять символ » _ «;
- максимальная длина имени переменной 255 символов;
- комментарии обозначаются сиволом » ‘ «.
Рекомендуемая структура сценария:
' === Script Information Header === ' Script Name: ' название сценария; ' Date: ' дата изменения; ' Author: ' автор; ' Description: ' описание; ' === Initialization Block === Option Explicit ' директива, запрещающая автоматическое создание ' переменных; Dim <Variable> ' объявление переменных; Dim <Array>() ' объявление массивов; Set <Object> ' подключение объектов; ' === Script Main Logic === ' тело сценария; ' === Functions and Procedures === ' процедуры и функции;
Примечание. Здесь и далее в треугольных скобках указываются обязательные команды и параметры, значения которых изменяются в зависимости от контекста сценария. В квадратных скобках указываюся необязательные параметры.
По умолчанию переменные в сценариях объявляются автоматически при первом использовании в теле скрипта, если это не запрещено директивойOption Explicit. Если же в начале сценария объявить директиву Option Explicit, то все переменные нужно определять заранее с помощью следующих конструкций:
Dim <ValueName1> ' переменная, доступная всем подпрограммам; Public <ValueName2> ' переменная, доступная всем подпрограммам; Private <ValueName3> ' переменная, доступная только текущей программе и ее подпрограммам;
Константы объявляются в начале сценария с помощью конструкции:
Const <ConstName1> = <Value1> ' константа, доступная всем подпрограммам; Public Const <ConstName2> = <Value2> ' константа, доступная всем подпрограммам; Private Const <ConstName3> = <Value3> ' константа, доступная только текущей программе ' и ее подпрограммам.
Тип переменной присваивается автоматически после внесения в нее первого значения. В Visual Basic существуют следующие типы данных:
- empty — неинициализированная переменная;
- null — пустая переменная;
- boolean — логический тип, возможные значения: False, True или 0, 1;
- byte — 8-битное целое число без знака, возможные значения: 0 .. 255;
- integer — 32-битное целое число, возможные значения: -32768 .. 32767;
- long — 64-битное целое число, возможные значения: -2147483648 .. 2147483647;
- currency — денежный тип, возможные значения: -922337203685477,5808 до 922337203685477,5807;
- single — число с плавающей точкой, возможные значения: -3.402823e38 .. -1.401298e-45 для отрицательных чисел и 1.401298e-45 .. 3.402823e38 для положительных чисел;
- double — число с плавающей точкой, возможные значения: 1.79769313486232e308 .. -4.94065645841247e-324 для отрицательных чисел и 4.94065645841247e-324 .. 1.79769313486232e308 для положительных чисел;
- date — дата, возможные значения: 01.01.1900 и 31.01.9999;
- string — строковая переменная, вместимость до 2 миллиардов символов;
- object — указатель на объект;
- error — код ошибки.
Данные можно проверять на соответствие типам, а так же переводить из одного типа в другой, если значения позволяют это сделать. Для операций над типами данных используются следующие команды:
VarType(<Value>) ' возврат номера типа переменной; TypeName(<Value>) ' возврат имени типа переменной; IsArray(<Value>) ' проверка, что переменная - это массив; IsDate(<Value>) ' проверка, что переменная - это дата; IsEmpty(<Value>) ' проверка, что переменная неинициализирована; IsNull(<Value>) ' проверка, что переменная пустая; IsNumeric(<Value>) ' проверка, что переменная - это число; IsObject(<Value>) ' проверка, что переменная - это объект; CCur(<Value>) ' конвертация в тип currency; CBool(<Value>) ' конвертация переменной в тип boolean; CByte(<Value>) ' конвертация переменной в тип byte; CDate(<Value>) ' конвертация переменной в тип date; CDbl(<Value>) ' конвертация переменной в тип double; CInt(<Value>) ' конвертация переменной в тип integer; CLng(<Value>) ' конвертация переменной в тип long; CSng(<Value>) ' конвертация переменной в тип single; CStr(<Value>) ' конвертация переменной в тип string.
Как было сказано выше, Visual Basic не накладывает строгих ограничений на имена переменных, но в то же время существуют рекомендации для названий переменных, чтобы в тексте сценария легко определять тип данных. Для этого перед именем переменной рекомендуется ставить условные символы, которые определяют тип переменной:
- iValueName — числовые типы
- sValueName — строковый тип
- bValueName — логический тип
- dValueName — дата
- oValueName — объект
- cValueName — константа
- aArrayName — массив
В VBS-сценариях возможно использование массивов переменных, которые позволяют хранить списки, таблицы и даже более сложные конструкции. Одномерные массивы (списки) могут быть динамическими, то есть они позволяют изменять свою размерность в ходе работы сценария. Все массивы объявляются командой Dim:
Dim <ArrayName[(Dimention)]>
Пример использования массивов
Dim aMyArray1(10,10) ' создание статического массива размерностью 11х11; Dim aMyArray2() ' создание динамического массива; aMyArray1(0,0) = "Hello" ' заполнение массива; aMyArray1(0,1) = "People" ' заполнение массива; aMyArray1(1,0) = "World" ' заполнение массива.
Прежде, чем пользоваться динамическим массивом, ему нужно указать текущую размерность с помощью команды ReDim, после чего массив можно переформировать в любом месте сценария, при этом либо очистить весь массив, либо сохранить старые значения ячеек командой Preserve:
ReDim aMyArray2(0) ' формирование массива из одного элемента; aMyArray2(0) = "Hello" ' заполнение массива; ReDim aMyArray2(1) ' удаление старого массива и формирование нового из ' друх элементов; aMyArray2(0) = "Hello" ' заполнение массива; aMyArray2(1) = "World" ' заполнение массива; ReDim Preserve aMyArray2(2) ' формирование массива из трех элементов, оставляя ' старые значения элементов в тех ячейках, где они были; aMyArray2(1) = "!" ' заполнение массива; Erase aMyArray2 ' удаляление массива.
Чтобы узнать размерность массива, обычно пользуются функцией UBound, которая будет рассмотрена ниже вместе с остальными функциями работы с данными.
Ни один полноценный сценарий не обходится без ветвлений, ветвления помогают выбрать верный путь при выполнении или невыполнении какого-то заложенного условия. Иными словами, ветвления реализуют логику сценария. В VBS-сценариях реализованы несколько механизмов ветвлений. Рассмотрим их по порядку.
Конструкция для одного действия, выполняемого по условию:
If <Condition> Then <Action>
Конструкция для нескольких действий, выполняемых по условию:
If <Condition> Then <Action> <Action> End if
Конструкция «развилка»:
If <Condition> Then <Action> <Action> Else <Action> <Action> End if
Конструкция «развилка на несколько путей» (вариант сIf):
If <Condition> Then <Action> <Action> ElseIf <Condition> Then <Action> <Action> Else <Action> <Action> End if
Во всех приведенных выше конструкциях применяется следующее правило: «Если выполняется условие <Condition>, то произвести список действий <Action>, которые расположеные под текущем блоком условия. Если текущее условие не выполняется, то перейти к списку действий <Action> под командой Else.»
Конструкция «развилка на несколько путей» (вариант сSelect):
Select Case <Variable> Case <Significance> <Action> <Action> Case <Significance> <Action> <Action> Case Else <Action> <Action> End Select
В данной конструкции работает правило: «Если значение переменной <Variable> равно значению <Significance>, то произвети список действий <Action> под этим значением, иначе перейти к проверке следующего значения <Significance>.»
Для организации повторяющихся действий или перебора элементов массива обычно используются циклы. В VBS-сценариях организованы несколько видов циклов: обычный цикл, цикл с неизвестным количеством итераций, цикл по условию.
Обычный цикл организуется структурой For — Next, в аргументах которой задаются такие параметры как имя счетчика (<Counter>), начальное значение счетчика (<Start>), конечное значение счетчика (<Finish>) и, при необходимости, шаг счетчика (Step <StepSize>).
For <Counter> = <Start> To <Finish> [Step <StepSize>] <Actions> Next
Если в процессе работы цикла потребуется прекратить перебор значений, то это можно сделать с помощью команды Exit For.
For <Counter> = <Start> To <Finish> <Actions> If <Condition> Then Exit For <Actions> Next
Цикл с неизвестным количеством итераций обычно применяется для перебора всех значений в коллекции объекта, когда не известна его размерность. Эта структура переберет все значения (<Variable>) массива, переданного как парамер цикла (<Array>).
For Each <Variable> In <Array> <Actions> Next
Пример.
For Each oCurrentFile In oFiles WScript.Echo oCurrentFile.Name Next
Циклы с условиями применяются для обработки данных, при выполнении какого-то условия. Такие циклы бывают двух видов: с проверкой в начале цикла и с проверкой в конце.
Цикл, пока выполняется условие, с проверкой в начале
Do While <Condition> <Action> Loop
Цикл, пока не выполнится условие, с проверкой в начале
Do Until <Condition> <Action> Loop
Как уже было сказано выше, условия можно ставить в конец цикла. В этом случае тело цикла будет выполнено как минимум один раз. Так же как и в обычных циклах, цикл с условием можно прервать командой Exit Do:
Do <Action> If <Condition> Then Exit Do <Action> Loop Until <Condition>
Чтобы работать с данными и строить свои процедуры и функции, разработчки Visual Basic уже позаботились об основе сценариев — базовых функциях. VBS-скрипты функции для работы с датами, строками и числами, а так же базовые процедуры ввода-вывода и процедуры работы с сетью. Давайте вкратце рассмотрим встроенные функции.
Функции обработки дат:
Date ' возврат текущей даты; Time ' возврат текущего времени; Now ' возврат текущих даты и времени; DateDiff(<Interval>, <Date1>, <Date2>) ' возврат разницы между датами; MonthName(<MonthNumber>) ' возврат названия месяца; WeekDayName(<Day>, <Abbreviation>, <FirstDayOfWeek>) ' возврат названия дня недели; Day(<Date>) ' возврат дня из указанной даты; Month(<Date>) ' возврат месяца из указанной даты; Year(<Date>) ' возврат года из указанной даты; Hour(<Date>) ' возврат часа из указанной даты; Minute(<Date>) ' возврат минуты из указанной даты; Second(<Date>) ' возврат секунды из указанной даты.
Функции обработки строк:
Asc(<Char>) ' возврат ANSI-кода символа; Chr(<Number>) ' возврат символа по ANSI-коду; InStr(<Line>, <Find>) ' возврат позиции подстроки в указанной ' строке; InStrRev(<Line>, <Find>) ' возврат позиции подстроки в указанной ' строке, начиная с конца строки; Join(<Array>, <Delimiter>) ' преобразование массива в строку; Len(<Line>) ' возврат длины строки; LCase(<Line>) ' преобразование строки в строку из малых ' символов; UCase(<Line>) ' преобразование строки в строку из больших ' символов; Left(<Line>, <Number>) ' возврат указанного количества символов с ' начала строки; Right(<Line>, <Number>) ' возврат указанного количества символов с ' конца строки; Mid(<Line>, <StartNumber>, <Number>) ' возврат указанного количества символов с ' указанного номера символа строки; Replace(<Line>, <Find>, <Replace>[, Params]) ' замена подстроки в указанной строке; Space(<Number>) ' строки из указанного количества пробелов; Split(<Line>, <Delimiter>[, Params]) ' преобразование строки в массив; String(<Number>, <Char>) ' строка из указанного количества ' определенных символов; SrtReverse(<Line>) ' зеркальное отображение строки; Trim(<Line>) ' обрезка пробелов слева и справа от строки; LTrim(<Line>) ' обрезка пробелов слева от строки; RTrim(<Line>) ' обрезка пробелов справа от строки.
Математические функции:
Randomize ' инициализация механизма случайных чисел (ничего не возвращает); Rnd ' возврат случайного нецелочисленного значения от 0 до 1; Atn(<Number>) ' вычисление арктангенса числа; Cos(<Number>) ' вычисление косинуса числа; Sin(<Number>) ' вычисление синуса числа; Exp(<Number>) ' вычисление натурального логарифма числа; Log(<Number>) ' вычисление десятичного логарифма числа; Sqr(<Number>) ' вычисление квадратного корня числа; Abs(<Number>) ' вычисление абсолютного значения числа; Hex(<Number>) ' вычисление шеснадцатеричного значения числа; Int(<Number>) ' округление числа; Fix(<Number>) ' вычисление целой части числа.
И, естественно, помимо упомянутых функций, сценарии поддерживают все простейшие математические и логические операции:
- = — оператор присваивания;
- + — сумма двух чисел;
- — — вычитание двух чисел;
- * — умножение двух чисел;
- / — деление двух чисел;
- — целочисленное деление двух чисел;
- Mod — остаток от деления двух чисел;
- ^ — возведение в степень;
- & — соединение двух строк;
- Is — сравнение двух объектов;
- Eqv — сравнение двух выражений;
- Not — логическая операция отрицания;
- And — логическая операция конъюнкции;
- Or — логическая операция дизъюнкции;
- Xor — логическая операция исключения;
- Imp — логическая операция импликации.
Очередность выполнения операций определяется как и во всех языках программирования: сначала выполняются операции в скобках, потом вычисляются функции, потом операции умножения и деления, следом идут сложение и вычитание, и завершают вычисление логические операции.
Сценарии, написанные на Visual Basic, позволяют определять пользовательские процедуры и функции и вызывать их из основной программы. Между процедурой и функцией практически нет никакого различия, разница заключется в логическом смысле этих подпрограмм: функции обычно используются для вычисления какого-то значения, а процедуры — для выполнения действий. Тем не менее и процедуры, и функции могут выполнять операции и передавать значения основной программе. Несмотря на это, все же не стоит забывать о предназначении этих подпрограмм: функции — для вычисления, процедуры — для действий.
Функция объявляется оператором Function, после которого следует название пользовательской функции, которое не должно совпадать ни с одним зарезервированным словом языка Visual Basic, далее указываются переменные, которые будут передаваться подпрограмме в качестве параметров — указание переменных в этой конструкции означает выделение ячеек памяти для переменных подпрограммы (объявление переменных для функции). В теле подпрограммы структура сценария ничем не отличается от обычной программы (здесь можно объявлять дополнительные переменные, поизводить операции, использовать другие функции и процедуры), в конце тела должен присутствовать оператор присвоения функции какому-то значению — это значение и будет возвращено основной программе. Прервать выполнение функции можно оператором Exit Function, но в этом случае нужно не забыть присвоить функции какое-то значение, иначе сценарий выдаст ошибку. Завершается функция оператором End Function.
Определение функции
Function <FunctionName>([Arguments]) <Actions> If <Condition> Then <Actions> <FunctionName> = <Value> Exit Function End If <Actions> <FunctionName> = <Value> End Function
Вызов функции
<Variable> = <FunctionName>([Arguments])
Процедура определяется аналогично функции, но другим оператором -Sub. Так как процедура не возвращает основной программе никаких значений, то оператора присвоения перед выходом из процедуры нет. Прервать выполнение процедуры можно с помощью команды Exit Sub, а завершается вся конструкция оператором End Sub. Чтобы в основной программе вызвать процедуру, необходимо использовать ключевое слово Call и имя функции с необходимыми аргументами. (Ключевое словоCallне является обязательным, но я рекомендую его использовать чтобы избежать неправильных вызовов процедуры.)
Определение процедуры
Sub <SubName>([arguments]) <Actions> If <Condition> Then <Actions> Exit Sub End If <Actions> End Sub
Вызов процедуры
[Call] <SubName>([arguments])
Кстати, процедуры и функции должны располагаются в конце сценария.
Во время работы подпрограммы значения переменных основной части скрипта не изменяются, даже если в подпрограмме есть одноименные переменные. Чтобы подпрограмма имела возможность менять значения переменных основного сценария, необходимо в аргументах подпрограммы задать свойство переменных как ByRef. По умолчанию все переменные определяются со свойством ByVal.
Sub <SubName>(ByRef <Argument1>[, arguments]) <Actions> <Argument1> = <expression> <Actions> End Sub
В данном случае аргумент <Argument1> передается по ссылке на ячейку памяти — меняется значение переменной в основном сценарии. Иными словами, с помощью параметра ByRef процедура превращается в функцию — подпрограмма возвращает результат вычислений в основную программу.
По умолчанию все ошибки обрабатываются сценарием в автоматическом режиме, и, при возникновении ошибки, работа сценария останавливается. Для отключения автоматической обработки ошибок нужно использовать специальную директиву On Error Resume Next, которая отключает автоматическую обработку ошибок и продолжает работы сценария даже при их наличии. Для ручной обработки ошибок необходимо обратится к встроенному объектуErr, который хранит в себе статус ошибок. Объект Err имеет следующие свойства и методы:
Number ' возврат номера последней ошибки; Description ' возврат описания последней ошибки; Clear ' очистка объекта Err; Raise ' вызов тестовой ошибки.
Пример ручной обработки ошибки:
On Error Resume Next iTotalPoints = InputBox("Введите общее количество очков") iNumberOfTests = InputBox("Введите количество тестов") iAvarage = iTotalPoints / iNumberOfTests Select Case Err.Number Case 0 ' нет ошибок; WScript.Echo "Средний балл = " & CStr(iAvarage) Case 11 ' деление на ноль; WScript.Echo "Количество тестов не может равняться нулю" Case 13 ' несоотвествие типов; WScript.Echo "Вы ввели нечисловое значение" Case Else ' нет ошибок; WScript.Echo "Неизвестная ошибка WScript.Quit" End Select
VBS-сценарии, как и их родитель — язык Visual Basic, является объектно-ориентированным языком программирования, то есть основной концепцией является понятие объектов и классов
Класс — это тип, описывающий устройство объектов. Объект подразумевает под собой нечто, что обладает определённым поведением и способом представления, объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Итак, чтобы работать с объектом, его нужно сначала создать, используя классы из нужной библиотеки:
Set <ObjectName> = CreateObject(<Library>.<Class>)
Удалить объект можно, присвоив ему значение Nothing:
Set <ObjectName> = Nothing
Все объекты, с которыми работает Windows Script Host, имеют методы и свойства. Чтобы обратиться к методу, необходимо указать объект, а через точку — метод с необходимыми параметрами.
<Object>.<Method> <Param1>[, Param2, ..., ParamN] Call <Object>.<Method>(<Param1>[, Param2, ..., ParamN])
Аналогичная ситуация со свойствами, но свойства можно как назначать, так и считывать в переменные и другие свойства, правда, следует учитывать тип данных переменных и свойств, иначе сценарий выдаст ошибку несовместимости типов данных.
<Object>.<Property> = <Value> <Object1>.<Property1> = <Object2>.<Property2> <MyVariable> = <Object>.<Property>
Пример. Создание объекта файловой системы, обращение к методу создания папки, удаление объекта.
Set oFSO = CreateObject("Scripting.FileSystemObject") Call oFSO.CreateFolder("C:Test") Set oFSO = Nothing
Обратите внимание, что понятие «объект» относится к логике сценария, а не к логике файловой системы. То есть, когда мы говорим «удаление объекта», мы имеем ввиду логический объект сценария, который никак не влияет на удаление каких-то частей файловой системы.
Чтобы узнать, какие существуют библиотеки в Вашей операционной системе, включенные в библиотеки классы, их методы и свойства, можно воспользоваться проводником объектов, например из Microsoft Word:
- Запустить MS Word.
- В главном меню выбрать Tools -> Macro -> Visual Bacis Editor
- В окне редактирования макросов выбрать View -> Object Browser
Если какая-то библиотека не отражена в списке, то ее можно подключить через меню Tools -> References.
В сценариях есть методы, не входящие ни в какой класс, они доступны непосредственно в теле сценария:
MsgBox(<Message>[, Params]) ' вывод оконного сообщения на экран; InputBox(<Message>[, Params]) ' вывод диалогового окна на экран.
Пример вывода диалогового окна с запросом текста, а после этого вывод на экран оконного сообщения с введенным текстом.
MyValue = InputBox("Введите текст", "Первое окно", "Текст нужно ввести здесь") MyResult = MsgBox(MyValue, 1, "Второе окно")
Методы и свойства корневого класса WScript, не требуют создания объекта — они автоматически доступны для использования непосредственно в теле сценария.
CreateObject(<Library>.<Class>) ' создание объекта; GetObject(<FilePath>) ' подключение объекта из файла; ConnectObject(<Object>, <Prefix>) ' подключение к событиям существующего объекта; DisconnectObject(<Object>) ' отключение от событий объекта; Echo([Message]) ' вывод сообщения на экран; Arguments ' возврат массива аргументов командной строки сценария; Name ' возврат имени интерпретатора сценариев; Path ' возврат пути к интерпретатору сценариев; FullName ' возврат полного имени интерпретатора сценариев; Version ' возврат версии интерпретатора сценариев; BuildVersion ' возврат версии сборки интерпретатора сценариев; ScriptName ' возврат имени файла сценария; ScriptFullName ' возврат полного имени файла сценария; Interactive ' установка или возврат режима интерактивности сценария; Sleep(<Milliseconds>) ' приостановка работы на указанное количество миллисекунд; Quit ' прекращение работы сценария.
Применение этих методов и свойств более подробно мы разберем в примерах других классов.
Для работы с операционной системой используется специальный класс Shell, который позволяет выполнять такие операции как запуск программ, изменение реестра, создание ярлыков, доступ к системным папкам и системным переменным, доступ к системному журналу. Итак, методы и свойства класса Shell:
ExpandEnvironmentStrings(<VariableName>) ' возврат значения запрошенной переменной системы; EnviEnvironment(<VariableName>) ' возврат массива переменных системы; CreateShortcut(<PathToCreate>) ' создание ярлыка; Popup(<Message>[, Params]) ' вывод оконного сообщения на экран; RegRead(<ValuePath>) ' считывание значения из реестра; RegWrite(<ValuePath>,<Value>[, Type]) ' запись значения в реестр; RegDelete(<ValuePath>) ' удаление значения из реестра; LogEvent(<Type>,<Message>) ' запись события в системный журнал; Run(<Command>[, Params]) ' запуск программы в новом процессе; Exec(<Command>) ' запуск программы в дочерней консоли; AppActivate(<Title>) ' активация окна; SendKeys(<Keys>) ' отправка символов в активное окно; CurrentDirectory ' установка или возврат текущей директории; SpecialFolders([FolderName]) ' возврат массива служебных папок или пути ' запрошенной служебной папки.
Пример. Использование методов и свойств класса Shell.
' Создание объекта класса Shell Set oShell = Wscript.CreateObject("WScript.Shell") ' Запуск калькулятора oShell.Run("Calc.exe") ' Задержка WScript.Sleep(100) ' Запуск блокнота oShell.Run("Notepad.exe") ' Задержка WScript.Sleep(100) ' Переключение на окно калькулятора oShell.AppActivate "Calculator" ' Задержка WScript.Sleep(100) ' Иммитация нажатия клавиш oShell.SendKeys("1{+}2{=}") ' Получение пути к рабочему столу sDesktopPath = oShell.SpecialFolders("Desktop") ' Создание объекта ярлыка Set oLink = oShell.CreateShortcut(sDesktopPath & "Test.lnk") ' Настрока ярлыка oLink.TargetPath = WScript.ScriptFullName oLink.WindowStyle = 1 oLink.Hotkey = "CTRL+SHIFT+T" oLink.IconLocation = "notepad.exe,0" oLink.Description = "Test link" oLink.WorkingDirectory = sDesktopPath oLink.Save ' Создание объекта среды и получение в него свойств системы Set oSysEnv = oShell.Environment("SYSTEM") ' Вывод сообщения о количестве процессоров на экран MyResult = oShell.Popup("Number of processors: " & oSysEnv("NUMBER_OF_PROCESSORS"), _ 3, "Message", 0) ' Получение пути к папке Windows и вывод сообщения на экран MyResult = oShell.Popup("Windows directory: " & _ oShell.ExpandEnvironmentStrings("%WINDIR%"), 3, "Message", 0) ' Чтение ключа реестра и вывод его значения на экран WScript.Echo oShell.RegRead ("HKLMSoftwareMicrosoftWindowsCurrentVersionProductID") ' Запись строкового значения в реестр MyResult = oShell.RegWrite("HKCUScriptEngineValue", "My Value") ' Запись числового значения в реестр MyResult = oShell.RegWrite("HKCUScriptEngineKey", 1, "REG_DWORD") ' Удаление ключа реестра MyResult = oShell.RegDelete("HKCUScriptEngine") ' Запись события в системный журнал MyResult = oShell.LogEvent(0, "Test Script Completed")
Как мы уже убедились, VBS-сценарии могут работать с оболочкой Windows, но это не единственная их возможность. С помощью класса Network можно получить доступ к сетевым объектам и управлять ими. Давайте подребнее разберем класс Network:
ComputerName ' возврат имени компьютера; UserDomain ' возврат имени домена; UserName ' возврат имени пользователя; EnumNetworkDrives ' возврат списка подключенных сетевых дисков; MapNetworkDrive(<LocalName>, <RemoteName>, [UpdateProfile, User, Password]) ' подключение сетевого ресурса; RemoveNetworkDrive(<Name>, [Force], [UpdateProfile]) ' отключение сетевого ресурса; EnumPrinterConnections ' возврат списка сетевых принтеров; AddWindowsPrinterConnection(<PrinterPath>) ' подключение сетевого принтера; AddPrinterConnection(<LocalName>, <RemoteName>[, UpdateProfile, User, Password] ' подключение сетевого принтера на указанный порт; RemovePrinterConnection(<Name>[,Force, UpdateProfile]) ' отключение сетевого принтера; SetDefaultPrinter(<PrinterName>) ' выбор принтера по умолчанию;
Пример. Использование методов и свойств класса Network.
' Создание объекта класса Network Set oNetwork = WScript.CreateObject("WScript.Network") ' Вывод сообщения об имени компьютера WScript.Echo "Computer Name = " & oNetwork.ComputerName ' Вывод сообщения об имени текущего пользователя WScript.Echo "User Name = " & oNetwork.UserDomain & "" & oNetwork.UserName ' Подключение сетевого диска oNetwork.MapNetworkDrive "Z:" "\ServerShare" ' Получение коллекции подключенных сетевых дисков Set oDrives = oNetwork.EnumNetworkDrives ' Вывод сообщений о подключенных сетевых дисках For i=0 To oDrives.Count -1 step 2 WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1) Next ' Удаление сетевого диска oNetwork.RemoveNetworkDrive "Z:" ' Подключение сетевого принтера oNetwork.AddPrinterConnection "LPT1", "\ServerPrinter" ' Установка принтера по умолчанию oNetwork.SetDefaultPrinter "\ServerPrinter" ' Получение коллекции о подключенных принтерах Set oPrinters = oNetwork.EnumPrinterConnections
Очень часто в сценариях встречаются такие случаи, когда необходимо что-то создать, удалить, переместить или изменить на диске компьютера. Эту задачу позволяет решить класс FileSystemObject, предназначенный для работы с файловой системой. Ниже перечисленны объекты, которые может создать этот класс:
- FileSystemObject — главный объект, который позволяет создавать, удалять, управлять дисками, папками и файлами в общем;
- Drive — объект, позволяюший собирать информацию о дисках системы;
- Drives — объект, хранящий в себе список дисков системы;
- Folder — объект, позволяющий создавать, удалять, перемещать папки, а также собирать информацию о них и их содержимом;
- Folders — объект, хранящий в себе список подпапок указанной папки;
- File — объект, позволяющий создавать, удалять, перемещать файлы, а также собирать информацию о них;
- Files — объект, хранящий в себе список файлов указанной папки;
- TextStream — объект, позволяющий читать и создавать текстовые файлы.
Методы и свойства класса FileSystemObject (главного объекта):
BuildPath(<Path>, <Name>) ' добавляет имя к указанному пути; GetAbsolutePathName(<PathSpec>) ' возвращает полный путь; GetBaseName(<Path>) ' возвращает имя папки или файла (без ' расширения) в указанном пути; GetDrive(<DriveSpec>) ' создает объект Drive; GetDriveName(<Path>) ' возвращает имя диска в указанном пути; GetExtensionName(<Path>) ' возвращает расширение файла в ' указанном пути; GetFile(<FileSpec>) ' создает объект File; GetFileName(<PathSpec>) ' возвращает имя файла (без расширения) ' в указанном пути; GetFolder(<FolderSpec>) ' создает объект Folder; GetParentFolderName(<Path>) ' возвращает имя папки в котором хранится ' файл или папка по указанному пути; GetSpecialFolder(<FolderSpec>) ' создает объект Folder к указанной ' служебной папке; GetTempName ' возвращает случайно сгенерированное ' имя файла; DriveExists(<DriveSpec>) ' проверяет существование диска; FolderExists(<FileSpec>) ' проверяет существование папки; CopyFolder(<Source>, <Destination>[, Overwrite]) ' копирует папку; MoveFolder(<Source>, <Destination>) ' перемещает папку; DeleteFolder(<FolderSpec>[, Force]) ' удаляет папку; CreateFolder(<FolderName>) ' создает папку; FileExists(<Filespec>) ' проверяет существование файла; CopyFile(<Source>, <Destination>[, Overwrite]) ' копирует файл; MoveFile(<Source>, <Destination>) ' перемещает файл; DeleteFile(<FileSpec>[, Force]) ' удаляет файл; CreateTextFile(<FileName>[, Overwrite, UnioCode]) ' создает текстовый файл; OpenTextFile(<FileName>[, IOMode, Create, Format]) ' открывает текстовый файл для чтения или ' записи.
Объекты Drives, Folders и Files класса FileSystemObject хранят в себе информацию о дисках, папках и файлах и, в основном, используюся для сбора информации о файловой системе. Они имеют только два свойства:
Count ' возвращает количество элементов в коллекции; Item(<ObjectName>) ' возвращает запись с указанным индексом из коллекции (не используется), ' для перебора элементов коллекции приметяется цикл For Each.
Чтобы было более понятно, что же такое коллекция объектов, рассмотрим пример вывода на экран списка файлов корня диска C:
' Создание объекта класса FileSystemObject Set oFSO = CreateObject("Scripting.FileSystemObject") ' Создание объекта Folder Set oFolder = oFSO.GetFolder("C:") ' Получение коллекции файлов Set oFilesCollection = oFolder.Files ' Получение количества элементов в коллекции sResult = sResult & oFilesCollection.Count & " files in C:" & vbCrLf ' Чтение атрибутов каждого файла из коллекции For Each oFile in oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & oFile.Size & vbCrLf Next ' Вывод результата на экран MsgBox(sResult)
Объект Drive предоставляет доступ к свойствам локального или сетевого диска:
AvailableSpace ' возвращает размер свободного места на диске, доступного пользователю; DriveLetter ' возвращает букву диска; DriveType ' возвращает тип диска; FileSystem ' возвращает тип файловой системы диска; FreeSpace ' возвращает размер свободного места на диске; IsReady ' возвращает доступность диска; Path ' возвращает путь к диску; RootFolder ' создает объект Folder, указывающий на корень диска; SerialNumber ' возвращает серийный номер диска; ShareName ' возвращает сетевое имя диска; TotalSize ' возвращает емкость диска в байтах; VolumeName ' возвращает или устанавливает метку диска.
Объект Folder предоставляет доступ ко всем свойствам папки, а также позволяет производить над ней действия:
Attributes ' возвращает атрибуты папки; DateCreated ' возвращает дату создания папки; DateLastAccessed ' возвращает дату последнего доступа к папке; DateLastModified ' возвращает дату изменения папки; Drive ' возвращает букву диска, на котором расположена папка; Files ' возвращает коллекцию файлов папки; IsRootFolder ' возвращает True, если папка - это корень диска; Name ' возвращает имя папки; ParentFolder ' создает объект Folder, указывающий на ' родительскую папку; Path ' возвращает путь к папке; ShortName ' возвращает имя папки в формате 8.3; ShortPath ' возвращает путь к папке в формате 8.3; Size ' возвращает размер папки; SubFolders ' возвращает коллекцию подпапок; Type ' возвращает тип папки; Copy(<Destination>[, Overwrite]) ' копирует папку; Move(<Destination>) ' перемещает папку; Delete(<Force>) ' удаляет папку; CreateTextFile(<FileName>[, Overwrite, UniCode]) ' создает в папке текстовый файл.
Объект File аналогичен объекту Folder — он предоставляет доступ ко всем свойствам файла, а также позволяет производить над ним действия:
Attributes ' возвращает атрибуты файла; DateCreated ' возвращает дату создания файла; DateLastAccessed ' возвращает дату последнего доступа к файла; DateLastModified ' возвращает дату изменения файла; Drive ' возвращает букву диска, на котором расположен файл; Name ' возвращает имя файла; ParentFolder ' создает объект Folder, указывающий на ' родительскую папку; Path ' возвращает путь к файлу; ShortName ' возвращает имя файла в формате 8.3; ShortPath ' возвращает путь к файлу в формате 8.3; Size ' возвращает размер файла; Type ' возвращает тип файла; Copy(<Destination>[, Overwrite]) ' копирует файл; Move(<Destination>) ' перемещает файл; Delete(<Force>) ' удаляет файл; OpenAsTextStream([IOMode, Format]) ' открывает текстовый файл для чтения или записи.
Объект TextStream — это инструмент доступа к содержимому файла. С помощью него можно читать и изменять файл:
AtEndOfLine ' показывает, достигнут ли конец строки; AtEndOfStream ' показывает, достигнут ли конец строки; Column ' возвращает номер колонки, в которой находится курсор чтения; Line ' возвращает номер строки, в которой находится курсор чтения; Close ' закрывает файл - освобождает его для других процессов; Read(<CharactersNumber>) ' считывает указанное количество символов, начиная от позиции ' курсора чтения; ReadAll ' считывает весь файл; ReadLine ' считывает строку, в которой находится курсор чтения; Skip(<CharactersNumber>) ' пропускает указанное количество символов, начиная от позиции ' курсора чтения; SkipLine ' пропускает строку, в которой находится курсор чтения; Write(<String>) ' записывает строку; WriteLine(<String>) ' записывает строку и переводит курсор записи на следующую строку; WriteBlankLines(<Lines>) ' записывает указанное количество пустых строк.
Мы познакомились со всеми методами и свойствами класса FileSystemObject, рассмотрим пример использования этого класса:
' Задание констант кодов системных папок Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2 ' Задание констант кодов типов доступа к текстовому файлу Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 ' Создание объекта класса FileSystemObject Set oFSO = CreateObject("Scripting.FileSystemObject") ' Получение коллекции дисков Set DrivesCollection = oFSO.Drives ' Обработка каждого диска для получения его метки или сетевого имени For Each oDrive in DrivesCollection sResult = sResult & oDrive.DriveLetter & ": " If oDrive.DriveType = Remote Then sResult = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Then sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult & vbCrLf End If Next ' Вывод результатов на экран Wscript.Echo(sResult) ' Создание объекта диска C: Set oDrive = oFSO.GetDrive("C") sResult = oDrive.DriveLetter & ": - " ' Получение типа диска C: Select Case oDrive.DriveType Case 0: sResult = sResult & "Unknown - " Case 1: sResult = sResult & "Removable - " Case 2: sResult = sResult & "Fixed - " Case 3: sResult = sResult & "Network - " Case 4: sResult = sResult & "CD-ROM - " Case 5: sResult = sResult & "RAM Disk - " End Select ' Определение доступности диска и получение его свойств If oDrive.IsReady Then sResult = sResult & "Ready" & vbCrLf sResult = sResult & "FileSystem is " & oDrive.FileSystem & vbCrLf sResult = sResult & "Available Space: " & _ FormatNumber(oDrive.AvailableSpace/1024, 0) & " Kbytes" Else sResult = sResult & "Not ready" End If ' Вывод результатов на экран Wscript.Echo(sResult) ' Создание объекта служебной папки (папка временных фалов Windows) Set oTempFolder = oFSO.GetSpecialFolder(TemporaryFolder) ' Создание объекта текстового файла (и создание его в корне диска C:) Set oFile = oFSO.CreateTextFile("C:TestFile.txt", True) ' Запись в текстовый файл oFile.WriteLine("This is a test.") oFile.WriteLine(sResult) ' Закрытие текстового файла и освобождение его для других процессов oFile.Close ' Проверка на наличие файла в папке временных файлов Windows, удаление этого файла If oFSO.FileExists(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) Then _ oFSO.DeleteFile(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) ' Создание объекта файла Set oFile = oFSO.GetFile("C:TestFile.txt") ' Перемещение файла в папку временных файлов Windows oFile.Move(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) ' Изменение атрибута у файла If oFile.Attributes and 32 Then oFile.Attributes = oFile.attributes - 32 Wscript.Echo("Archive bit is cleared") Else oFile.Attributes = oFile.attributes + 32 Wscript.Echo("Archive bit is set") End If sResult = oFile.Path & vbCrLf & oFile.DateLastModified & ":" & vbCrLf ' Создание объекта потока путем открытие файла на чтение Set oTestFile = oFSO.OpenTextFile(oFile.Path, ForReading, False) ' Чтение потока, пока не встречен его конец Do While oTestFile.AtEndOfStream <> True sResult = sResult & oTestFile.ReadLine Loop ' Закрытие текстового файла и освобождение его для других процессов oTestFile.Close ' Вывод сообщения на экран Wscript.Echo(sResult)
Данный сценарий предназначен для очистки системы от устаревших файлов во временных каталогах Windows и профилях пользователей. В этом примере можно увидеть как работают практически все вышеописанные конструкции: структура сценария, название переменных, работа с массивами и коллекциями, ручная обработка ошибок, считывание системных переменных, создание текстового файла журнала работы сценария, работа с файловой системой, использование процедур.
' ==== Script Information Header ==== ' script name: Purge Temp ' version: 1.0 ' date: 16.07.08 ' autor: Bochkarev Vitaly ' description: Скрипт удаляет устаревшие временные файлы с компьютера ' ==== Script Main Logic ==== ' Включение ручной обработки ошибок On Error Resume Next ' Константа временного интервала, когда файлы считаются устаревшими Const PurgeTime = 14 ' дней ' Исключения - профили пользователей, которые не должны обрабатываться Dim aExceptions(3) aExceptions(0) = "Default User" aExceptions(1) = "LocalService" aExceptions(2) = "NetworkService" aExceptions(3) = "All Users" ' Создание объектов оболочки и файловой системы Set oShell = CreateObject("wscript.shell") Set oFSO = CreateObject("Scripting.Filesystemobject") ' Определение путей служебных папок sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%") sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") sWinTempFolder = sWinDir & "Temp" sDocuments = "C:Documents and Settings" ' Создание фурнала работы сценария sLogFileName = sWinTempFolder & "PurgeTemp_" & Date sLogFileName = Replace(sLogFileName, ".", "_") sLogFileName = Replace(sLogFileName, "/", "_") Set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true) oLogFile.WriteLine "========== Start purging ==========" ' Очистка временной папки Windows oLogFile.WriteLine vbCrLf & "========== Windows Temporary folder ==========" PurgeFolder(sWinTempFolder) ' Очистка временной папки профиля пользователя и файлов Интернет oLogFile.WriteLine vbCrLf & _ "========== Users Temporary folder and Users Temporary Internet Files ==========" Set oDocuments = oFSO.GetFolder(sDocuments) Set colProfiles = oDocuments.SubFolders For Each oProfile In colProfiles bFlag = false For Each sException in aExceptions if InStr(oProfile.Path,sException) > 0 then bFlag = true exit for end if Next If bFlag = False Then PurgeFolder(oProfile.Path & "Local SettingsTemp") PurgeFolder(oProfile.Path & "Local SettingsTemporary Internet Files") End If Next ' Очистка карантина NOD32 oLogFile.WriteLine vbCrLf & "========== NOD32 Quarantine ==========" sQuarantine = sProgramFiles & "EsetInfected" PurgeFolder(sQuarantine) ' Закрытие файла журнала oLogFile.WriteLine vbCrLf & "========== Stop purging ==========" oLogFile.Close ' Процедура PurgeFolder - удаление старых файлов Sub PurgeFolder(sFolderPath) ' Создание объекта Folder Set oFolder = oFSO.GetFolder(sFolderPath) ' Получение коллекции файлов Set colFiles = oFolder.Files ' Обработка каждого файла из коллекции For each oFile in colFiles ' Проверка, является ли файл устаревшим If (Date-oFile.DateLastModified) > PurgeTime and (Date-oFile.DateCreated) > _ PurgeTime Then ' Запись сообщения в журнал сценария oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated ' Удаление устаревшего файла oFSO.DeleteFile oFile.Path, True ' Проверка на наличие ошибок if err.Number <> 0 then ' Запись сообщения об ошибке в журнал сценария oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description ' Очистка ошибки Err.Clear end if ' Пауза в 20 милисекунд WScript.Sleep 20 End if Next ' Получение коллекции подпапок Set colSubFolders = oFolder.SubFolders ' Обработка каждой подпапки For Each oSubFolder In colSubFolders ' Рекурсивный вызов процедуры удаления старых файлов - подпрограмма вызывает ' сама себя PurgeFolder(oSubFolder.Path) ' Проверка размера папки If oSubFolder.Size = 0 Then ' Запись сообщения в журнал сценария oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated ' Удаление пустой папки oFSO.DeleteFolder oSubFolder.Path ' Проверка на наличие ошибок If err.Number <> 0 then ' Запись сообщения об ошибке в журнал сценария oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description ' Очистка ошибки Err.Clear End if End if Next End Sub
Итак, мы познакомились с основами сценариев Visual Basic Script. Давайте подведем итог, и определим достоинства и недостатки таких сценариев:
- сценарии не требуют компиляции и их код в любой момент можно отредактировать;
- VBS-сценарии практически не ограничены в функциональности и могут использовать различные системные библиотеки и объекты других приложений;
- VBS-файлы могут выполняются как в консоли, так и в оконном режиме, поэтому пользователь может контролировать видимость хода выполнения сценария;
- VBS-сценарии позволяют использовать пользовательские процедуры и функции;
- этот язык идеально подходит для работы со строковыми и числовыми переменными, датами, а также для обработки текстовых файлов, управления системой и доменом;
- VBS-сценарии сложны в написании и требуют навыков программирования;
- такие сценарии работают только в операционных системах семейства Windows.
Виталий Бочкарев
Introduction: The Ultimate VBS Tutorial
VBS is one of the most popular programming languages on instructables so there surely will be several instructable guides on programming VBS. However, most of them rush through commands and just show the basic way to do them. They also have a lot of the same basic material. I decided to search all around instructables and w3schools.com until I had a very good list of commands. When I did I started this tutorial that really shows a lot of detail about each command. Now lets start making VBS scripts…
You will need…
-A computer running Windows 98 or higher (No Macs)
-Notepad
-Time
-A brain
Step 1: First Things First…
Open Notepad
Start>All Programs>Accessories>Notepad
Lets get ready to script!
Step 2: Save Me!
Before we begin I should teach you how to save a vbs file in notepad.
To save a file you have to click File>Save As
Then type
name.vbs
Where it says name you can put whatever you want but it MUST end with .vbs
Step 3: Message Boxes
This makes an error message how you like it.
msgbox («Message goes here»,0+16,»Title goes here»)
if the user is supposed to make a decision the variable can be added like this.
variable=msgbox («Message goes here»,0+16,»Title goes here»)
The numbers in the middle vary what the messge box looks like.
Here is the list
0 — ok button only
1 — ok and cancel
2 — abort, retry and ignore
3 — yes no and cancel
4 — yes and no
5 — retry and cancel
TO CHANGE THE SYMBOL (RIGHT NUMBER)
16 — critical message icon
32 — warning icon
48 — warning message
64 — info message
DEFAULT BUTTON
0 = vbDefaultButton1 — First button is default
256 = vbDefaultButton2 — Second button is default
512 = vbDefaultButton3 — Third button is default
768 = vbDefaultButton4 — Fourth button is default
SYSTEM MODAL
4096 = System modal, alert will be on top of all aplications
Note: There are some extra numbers. You just have to add them to the numbers already there like
msgbox («Hello World», 0+16+0+4096)
Step 4: Input Boxes
Input boxes allow the user to INPUT a text string. Here is the code for one.
variable=inputbox («Message»,»Title»,»Default Text»)
Any of the text between the commas is optional by just not putting anything there like
variable=inputbox («Type a Message»,,»Message»)
Step 5: Working With Variables
Math is one of the most simple tasks for a computer. VBS can do complex math in a snap.
Vbs mainly does algebraic math but you can do other than that. First we should make a variable. That is the easiest task in the scripting world.
dim variable name here
Variables can be placed where text goes like this…
Msgbox (var)
The only rule for naming variables is no spaces allowed.
To do math, in between each part of the equation must have a space like so.
y + 5 = 6 * 8
You can also treat an equation like a variable…
Msgbox (5.5 * 3)
Note: VBS will give you an error specifically for dividing by zero so just don’t do that.
Step 6: Strings
Strings are variables that hold text. You can make a string like this.
«This is a text string»
VBS will let you treat the text string as a variable but you can make a text string a variable as easy as this.
dim name
name = «This is a text string»
Note:You have to have the quotation marks or else the script will think your talking about a variable.
Note 2:Text strings do have a capacity limit to how much information they hold so be careful.
Step 7: Decisions, Decisions…
What if you needed the program to check if a variable was at a certain value? In programming that is extremely easy. The decision making command is called the IF THEN ELSE statement. An example program would be…
if 200 > 16 then
msgbox («200 is greater than 16»)
else
msgbox («200 isn’t greater than 16»)
end if
That was a foolish example (since 200 will always be greater than 16) of how the if statement works. So now you see IF 200 > 16 THEN let the user know ELSE tell the user it isn’t then END the IF statement.
So now you can make a program that will do one of two things. Can you do more? Yes! That is called a nested IF statement. For example…
if 200 > 16 then
msgbox («200 is greater than 16»)
else
if 200 = 16 then
msgbox («200 is equal to 16»)
else
msgbox («200 isn’t greater than 16»)
end if
end if
This program will say if 200 is equal to, greater than or less than 16.
The same can be used with text strings.
if userinput = password then
msgbox («Welcome»)
else
msgbox («Access denied»)
end if
Note that ‘userinput’ and ‘password’ are variable holding text strings not text strings themselves.
Step 8: Doing the Loop
What if you want a program to repeat something forever or until something happens? Have I got a command for you! It’s the do loop command! Its most basic use is this.
do
msgbox («Hi»)
loop
A more complex version would be
do until 24 > 8
msgbox («Hi»)
loop
A similar version of that code would be
do
msgbox («Hi»)
loop until 24 > 8
While the two codes look the same there is a difference. That is, the first code won’t even go into the loop if the criteria is met before the loop is started while the second one has to go through the loop at least once because the ‘loop until’ is after everything in the loop.
Step 9: Important Command
One of the things that makes VBS special is it can work with other programs that are compatible with it by creating something called an object. In other words a VBS script can get more commands by controlling other programs. To use objects you have to let the script know what you are going to call it. Here is how you set an object…
set name = wscript.CreateObject(«what the object is»)
It is a good idea to set objects in the first lines of your code. There are two reasons for that.
1.It makes your program clearer to read.
2.It’s impossible to use an object that hasn’t been set. Its best to get that done first to avoid errors.
The next two steps will show two examples of objects.
Step 10: Shell
Say you want your script to do something like run a program or DOS-ish commands. This object is perfect. It is called the Windows Shell object. Here is a simple way to use it to open a directory.
set wshshell = wscript.CreateObject(«wscript.shell»)
wshshell.run C:Windows
The C:Windows folder should open.
Another command is sendkeys. It will, well, send keys, to applications. Say you want to send hello world into a program, just type.
set wshshell = wscript.CreateObject(«wscript.shell»)
wshshell.sendkeys «Hello World»
Another command is the Echo command which sends a message box with no picture, an OK button, and Windows Script Host in the title. An example is.
set wshshell = wscript.CreateObject(«wscript.shell»)
wshshell.echo «Hello World»
Step 11: Sapi
Did you ever want to make a computer talk? Sure you could open the text to speech window, but what if you want a computer to read results without any user interface? Just use the SAPI (Speech Application Programming Interface) object.
Set Sapi = Wscript.CreateObject(«SAPI.SpVoice»)
Sapi.speak «Hello world»
The speak command can also use variables.
Set Sapi = Wscript.CreateObject(«SAPI.SpVoice»)
Sapi.speak variable
Step 12: Date and Time
These commands will show the date or time if used correctly. They can be treated like variables.
———————(Date)————————-
Date (Returns system date)
Day (Returns the day (1-31)from the date command) ex. Day (Date)
Month (Returns the month (1-12) from the date command) ex. Month (Date)
Year (Returns the year from the date command) ex. Year (Date)
———————(Time)————————
Time (Returns the current system time to the second)
Second (Returns the second (0-59) from the time command) ex. Second (Time)
Minute (Returns the minute (0-59) from the time command) ex. Minute (Time)
Hour (Returns the hour (0-23) from the time command) ex. hour (Time)
For example
msgbox (Date)
msgbox (Time)
That is a simple program that shows the use of the Date and Time commands.
A more elaborate program that uses all of the commands listed here and some extra can be found here .
Step 13: Reading Plain Text
Say you want the computer to read from a file and store the contents as a text string. Here is a code that does just that.
Dim Textstring
Set objFSO = CreateObject(«Scripting.FileSystemObject»)
Set objText = objFSO.OpenTextFile(«File.txt», 1)
Textstring = objText.ReadAll
Step 14: Final Exam…
This time take what you have learned from this instructable and write a program by yourself. Comment it so we all can enjoy it.
Step 15: Bye
Thank you for reading this instructable. Comment anything cool you come up with so we can all share our discoveries.
-Super_Nerd-
Step 16: Additional Steps: the String Function «Replace»
mohamadelmoussa asked for a command that would replace certain words with others in text strings. The replace command is definitely, what he was looking for. Here is the basic syntax.
Replace(string,»change this to»,»this»)
Here is an example of using the replace function…
text=»This is a good instructable!»
msgbox (Replace(text,»a good»,»an awesome»))
Thanks for the compliment example.
4 People Made This Project!
Recommendations
С этой статьей вы не научитесь программировать и даже не напишите как таковую программу, но найдете здесь отличные VBS скрипты и BAT файлы, которые без проблем напишете в обычном блокноте Windows, сможете усовершенствовать по своему, потом похвастаться перед друзьями и близкими. Возможно это поднимет вам настроение и вы отлично проведете время.
Большинство похожих скриптов пишутся для удобства и автоматизации каких-либо действий на компьютере с ОС Windows. Представленные же ниже скрипты мало окажутся полезными (может мне так кажется), но они отлично подойдут для первоначального знакомства с «кодингом». Вы отлично проведете время, удивив как себя, так и знакомых чайников (не программистов), плюс это еще один хороший вариант убить время за компьютером .
Немного терминологии:
- VBS — язык программирования для создания скриптов в ОС Windows, создается/редактируется в Блокноте Windows, имеет разрешение «.vbs». Думаю, продолжать не имеет смысла, ибо это мало о чем скажет, особенно новичкам. Интересующимся — статья в Википедии .
- BAT — пакетный файл, в народе просто «батник». Расширение файла «.bat». Дальше аналогично — статья в Википедии .
Данных расширений (vbs, bat) файлы создаются во всеми известном Блокноте Windows (Notepad). Для большего удобства создания скриптов рекомендуется использовать усовершенствованный (скажем так) блокнот — Notepad++. Он удобен подсветкой синтаксиса большого количества языков программирования, если вам это мало о чем говорит, то скачайте и пишите в нем — ошибок сделаете меньше в коде, ну или будет их проще найти, чем в том же мало функциональном Блокноте Windows.
Скачать Notepad++ можно на официальном сайте .
Для наглядности пример (слева — Блокнот Windows, справа — Notepad++):
Приступим
Если вы уже знакомы с VBS скриптами и батниками, то скорее всего нижеследующие примеры вам будут неинтересны, если же вы новичок, то для первоначального ознакомления — то, что нужно.
Научим компьютер здороваться
- Открываем Блокнот (или Notepad Plus Plus).
- Копируем в вставляем код:
Set sapi=CreateObject(«sapi. spvoice»)
sapi. Speak «Hello!»
Один нюанс: если вы прописали в кавычках слова русскими буквами, а при запуске произносится непонятно что, то у вас просто не установлен русский голосовой движок. Подробная установка и настройка голосового движка выходит за рамки нашей статьи, поэтому более подробно ознакомьтесь здесь и вновь возвращайтесь сюда.
Теперь, сделаем следующее: пропишем данный скрипт в автозагрузку, а это означает то, что при запуске компьютера вам будет произнесено написанное в программе слово (слова), если как в примере, то будет говорить — «Hello» при каждом включении компьютера. Как это сделать?
Все просто, программу (скрипт) добавить в автозагрузку можно таким же образом, то есть через такой же VBS скрипт. Создаем файл в блокноте, копируем/вставляем (Ctrl+C/Ctrl+V) следующий код:
Dim vOrg, objArgs, root, key, WshShell
root = «HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun»
KeyHP = «Program»
Set WshShell = WScript. CreateObject(«WScript. Shell»)
WshShell. RegWrite root+keyHP,»C:Privet. vbs /autorun»
Изменяем путь до скрипта «говорилки», вот эту строчку — C:Privet. vbs на свою. Прописываем где у вас лежит этот скрипт и как называется. Дальше сохраняем только что созданную мини программу в блокноте и запускаем. Все, теперь компьютер будет с вами здороваться пр каждом включении.
Открыть дисковод
- Открыть блокнот. Скопировать/Вставить следующий код:
Set a = CreateObject(«WMPlayer. OCX.7»)
Есть более интересная модификация данного скрипта:
Set WMPlayer = CreateObject(«WMPlayer. OCX.7»)
WMPlayer. CdRomCollection. Item(0).Eject()
В данном случае будет все время открываться-закрываться CD/DVD-привод, на ноутбуках в этом случае будет открываться после каждого его закрытия.
Внимание! Второй код (открытие-закрытие дисковода), некоторые антивирусы видят как вредоносную программу. Антивирус Касперского (в т. ч. и Kaspersky Free ) его видит именно так и уничтожает сразу же. В первом же случае (просто открытие дисковода) для антивирусных программ не является вредоносным скриптом.
Чтобы прекратить автоматически открывать-закрывать дисковод необходимо:
- Запустить диспетчер задач (комбинация клавиш Windows — Ctrl+Alt+Del).
- Перейти на вкладку «Процессы».
- Найти процесс wscript. exe — правая кнопка мыши — завершить процесс.
Интересная находка из Сети — игра на VBS. Необходимо угадать число от 0 до 100. Скрипт автоматически при запуске задает (разгадывает) число, которое вам необходимо угадать и ввести в специальном окошке, при неправильном ответе даются подсказки, например меньше или больше.
Ниже тот самый код который необходимо скопировать и вставить в блокнот, далее сохранить (расширение. vbs).
Вы также можете изменять сообщения по своему, все что написано кириллицей без проблем редактируется. Не бойтесь сломать код. Поэкспериментируйте. В случае чего заново скопируйте рабочий код отсюда.
Set y = CreateObject(«Scripting. FileSystemObject»)
Set y = Nothing
a = 0
u = 0
Randomize
Number = Int((RND*99)+1)
MsgBox «Я загадал число от 1 до 100, попробуй отгадать»,64,»Угадайка»
a = a + 1
c = InputBox(«Угадай число» & vbCrLf & vbCrLf & «Попытка: » & a & vbCrLf & vbCrLf & «Чтобы посмотреть результаты введите число !» & vbCrLf & vbCrLf & «Для выхода оставьте поле пустым» & vbCrLf & vbCrLf,»Угадайка»)
If c = «!» Then CreateObject(«WScript. Shell»).Run «notepad C:WindowsResult. dll»,3,True. Exit Do
If c <> «» Then
If IsNumeric(c) = True Then
If CInt(c) < Number Then MsgBox «Нет, это не » & c & «. Я загадал число больше»,64,»Угадайка»
If CInt(c) > Number Then MsgBox «Нет, это не » & c & «. Я загадал число меньше»,64,»Угадайка»
If CInt(c) = Number Then
Set y = CreateObject(«Scripting. FileSystemObject»)
MsgBox («Количество попыток: » & a)
If MsgBox («Правильно, это было число » & c & «. Начать заного?»,36,»Угадайка») = 6 Then Exit Do Else WScript. Quit
End If
Else
MsgBox «Это не число!»,16,»Угадайка»
a = a — 1
End If
If l = 6 Then WScript. Quit
End If
Loop
Ну и перед тем как переходить к батникам (.BAT) воспользуемся самым полезным VBS скриптом из всех перечисленных в этой статье.
Скрипт закрывающий wscript. exe
Сам скрипт:
Set TaskKill = CreateObject(«WScript. Shell»)
TaskKill. Run «TaskKill /f /im wscript. exe»
По сути он делает тоже самое, что чуть выше объяснялось в диспетчере задач, как например нельзя просто взять и закрыть надоедливый скрипт открывающий-закрывающий дисковод, а запустив данный скрипт все запущенные будут закрыты. Это как клин клином вышибают.
Немного познакомились с VBS скриптами и о том как их писать в блокноте, теперь рассмотрим несколько примеров использования BAT файлов (далее — батник).
Завершение работы /Перезагрузка компьютера
Совсем простой батник состоящий всего из одной строки.
- Открываем Блокнот.
- Пишем следующий код:
shutdown — s — t 1 — c — f
Есть такой вариант кода:
shutdown — r — t 1 — c — f
Все также, прописываем в блокноте, сохраняем с расширением. bat и после запуска компьютер перезагрузится (обычная перезагрузка компьютера).
Удаление обновлений
Данный батник пригодится в том случае, если вы уже обновились до Windows 10. В чем суть? В этом батнике перечислены команды по удалению нескольких обновлений, как видно из названия — обновления телеметрии, или как раз одна из шпионских штучек системы, мы однажды уже говорили как отключить функции слежки Windows 10. в данном же случае вы просто создаете батник, в содержимое копируете код ниже и запускаете, после чего будут удалены перечисленные обновления.
@echo
echo
echo Step 1: Delete Updates Telemetry
wusa /uninstall /kb:3068708 /quiet /norestart
wusa /uninstall /kb:3022345 /quiet /norestart
wusa /uninstall /kb:3075249 /quiet /norestart
wusa /uninstall /kb:3080149 /quiet /norestart
Таким образом можно удалить абсолютно любое обновление, даже назойливое KB971033 которое проверяет копию Windows 7 на подлинность .
В Интернете встречается много различных скриптов, якобы безвредных, но будьте осторожны, прежде чем пробовать непонятно какой скрипт, некоторые из них могут навредить, например — вносить изменения в реестр, а в случае каких ошибок система будет выдавать ошибки, в таком случае придется или восстанавливать реестр Windows или сделать восстановление системы.
как взломать скрипт
зачем скриптов
куда кидать скрипты
This entry was posted in Как сделать скрипт and tagged включены, запуск, компьютере, строка. Bookmark the <a href=»https://iprowebber.ru/pishem-programmy-skripty-v-bloknote-windows/» title=»Permalink to Пишем программы (скрипты) в Блокноте Windows» rel=»bookmark»>permalink</a>.
Windows, Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP
- 01.05.2021
- 2 870
- 0
- 23
- 23
- 0
- Содержание статьи
- Создание простого VBScript файла
- Возможные проблемы
- При запуске VBScript файла открывается Блокнот
- Текст отображается крякозябрами
- Добавить комментарий
VBScript — скриптовый язык программирования, который поддерживается операционными системами Microsoft Windows. С его помощью можно реализовать выполнение самых разных задач, от администрирования компьютера, до автоматизации пользовательских действий. Несомненным плюсом VBScript является тот факт, что для его работы не требуется установка каких-либо программ или обновлений — интерпретатор встроен в Windows по умолчанию (за исключением Windows 95, Windows NT 4.0 и Windows CE 3.0).
Давайте же разберем, как создать VBScript файл и как с его помощью можно выполнить простейшие операции.
Создание простого VBScript файла
Открываем Блокнот, и пишем туда следующее:
MsgBox("Привет мир!")
Нажимаем на меню Файл — Сохранить как, и в самом низу выбираем кодировку — ANSI. Затем, выбираем любое удобное место для сохранения, и сохраняем данный файл с именем helloworld.vbs
.
Теперь, можно попробовать запустить двойным щелчком получившийся файл — в результате должно появится окно с надписью «Привет мир!».
Вот таким образом был создан простой VBScript файл. Если же, вы получили совсем не то, что должно было быть — переходим к следующему разделу данной статьи.
Возможные проблемы
При запуске VBScript файла открывается Блокнот
Если при двойном щелчке по ранее созданному вами файлу, у вас открывается Блокнот, убедитесь, что вы сохраняете файл с расширением .vbs
в конце названия файла.
Текст отображается крякозябрами
Если при запуске созданного VBScript файла вы получили примерно следующее:
То проверьте, что при сохранении файла, вы установили значение «Кодировка» равное ANSI.
Тема достаточно простая, но почему-то некоторым кажется очень сложной и поэтому некоторые админы предпочитают не писать скрипты, а использовать сторонние инструменты для реализации каких-либо задач, хотя многие из этих задач может решать сама ОС.
Итак, начнём с самого главного. Некоторые наверное думают, что для того чтобы писать скрипты, нужны специальные программы. Здесь бы я ответил двояко — и да и нет, потому что на самом деле достаточно обычного блокнота, но я больше предпочитаю программу NotePad++ — она по красивее отображает текст скрипта и проще в коде ковыряться.
Сам процесс создания:
- Создаём текстовый документ test.txt;
- Меняем его расширение на vbs. Должно получиться так: test.vbs;
- Открываем с помощью блокнота или любого другого текстового редактора и пишем нашу программу.
Пример простой программы:
Впишем всего одну строку: msgbox («Hello, World!»)
Сохраняемся и запускаем наш скрипт. Радуемся результату.
Скрипт посложнее (простое вычисление квадратного корня):
a = inputbox(«Введите целое число»)
b = sqr(a)
msgbox(«Квадратный корень этого числа: «& b)
При желании можно много чего наворотить в скриптах, полёт фантазии велик — всё в Ваших руках! Смотрите, что уже я смог наворотить в скриптах в этом разделе.
Желаю удачи в освоении!
Жизнь админа должна быть проще…
VBScript is a lightweight scripting version of the popular Microsoft Visual Basic, developed by as the name suggests, Microsoft. It is used to develop dynamic web pages. It is much lighter compared to Visual Basic programming language but works as a scripting language like JavaScript. To run VBScript on the client-side, the client must have to use Internet Explorer because other browsers are still not supported by the VBScript.
How to make a VBScript program?
Just like many other simple scripting languages, VBScript can be written on a simple word editor, like notepad and other such softwares (e.g. notepad++, Wordpad, etc.). Refer the following steps to get a better idea of making a VBScript program:
Step 1: Open up a word editor of your choice (Here, notepad is used).
Step 2: For now, here is a simple VBScript program that will make a simple message dialog box to appear on the screen. The code for such a program in VBScript is:
a = msgbox("Have a good day, fellow GFG reader!", 0, "Making a VBScript program")
Code Explanation: You can put anything as long as it follows the variable declaration rules in VBScript instead of “a” which is at the beginning of the above code. Effectively, We can break and understand the above code in the following manner:
put_any_Variable_name = msgbox("Your main text here", 0, "Your title text here")
To change the property of the dialog box with respect to what you need, refer the following data:
Code | Property |
---|---|
0 | Only “OK” button will be displayed. ???? |
1 | OK and Cancel buttons will be displayed. ???? ❌ |
2 | Abort, Retry, and Ignore buttons will be displayed. ???? ???? ???? |
3 | Yes, No, and Cancel buttons will be displayed. ✅❎❌ |
4 | Yes and No buttons will be displayed. ✅❎ |
5 | Retry and Cancel buttons will be displayed. ???? ❌ |
16 | Critical Message icon will be shown in the dialog box ???? |
32 | Warning Query icon will be shown in the dialog box ❓ |
48 | Warning Message icon will be shown in the dialog box ???? |
64 | Information Message icon will be shown in the dialog box ⏺ |
0 | First button will become default |
256 | Second button will become default |
512 | Third button will become default |
768 | Fourth button will become default |
0 | Triggers the application modal (basically, the current application will stop working until the user responds to the dialog box) |
4096 | Triggers the System modal (basically, all applications will stop working until the user responds to the dialog box) |
Change “0” in the above written code with any of the numbers provided just above.
To get more than one above mentioned property in you dialog box, you can simple write, for example: “0+16”, instead of “0” in above code.
For reference, the code:
hydro = msgbox("Remember to drink water!", 0+64, "Hydration Check")
will give the following output:
That’s it, we have just written a basic VBScript program that will display a dialog box as output. Now onto saving this program.
How to save a VBScript program?
Follow the steps given below to save a VBScript program:
Step 1: Press Ctrl + Shift + S on the keyboard, Or click File>Save As on the notepad window, this will open up a Save As dialog window asking where to save the current notepad document.
Step 2: Now write any file name of your choice for this notepad document but make sure you write .vbs as its extension. Make sure to add “.vbs” after writing the file name in the “File name:” field.
Step 3: Now, change the value of “Save as type:” field from “Text Documents (*.txt)” to “All Files (*.*)” by clicking on it with help of the drop down menu.
Step 4: Finally, click on save after choosing an appropriate location of where the file should be saved to.
How to run a VBScript program?
Now, this is a very simple thing to do, simply double click on the now saved .vbs file from wherever you saved it and voila! It will run and give you the following output: