/
Автор: Книттель Б.
Теги: программирование переводная литература издательство питер операционная система window
Год: 2012
Текст
Внимание ! Текст предназначен только для предварительного ознакомительного чтения. После ознакомления с содержанием данной книги Вам следует незамедлительно ее удалить. Сохраняя данный текст Вы несете ответственность в соответствии с законодательством. Любое коммерческое и иное использование кроме предварительного ознакомления запрещено. Публикация данных материалов не преследует за собой никакой коммерческой выгоды. Эта книга способствует профессиональному росту читателей и является рекламой. Все права на исходные материалы принадлежат их авторам.
Краткое оглавление Введение ......................................................... 21 ЧАСТЬ I. СОЗДАНИЕ СЦЕНАРИЕВ С ПОМОЩЬЮ WINDOWS SCRIPT HOST Глава 1. Windows Script Host ......................................... 28 Глава2.РуководствопоVBScript......................................69 Глава 3. Создание сценариев и работа с объектами ....................... 113 Глава 4. Доступ к файлам и реестру ................................... 142 Глава 5. Сетевые и принтерные объекты ............................... 228 Глава 6. Объекты сообщений и факсов ................................. 254 Глава 7. Инструментарий управления Windows ........................... 301 Глава 8. Active Directory Scripting Interface .............................. 341 Глава 9. Использование сценариев для управления компьютерами и сетями ..... 398 ЧАСТЬ II. СРЕДА ОКРУЖЕНИЯ КОМАНДНОЙ СТРОКИ Глава 10. Командная строка CMD ..................................... 460 Глава 11. Пакетные файлы для пользы и развлечения ..................... 517 Глава 12. Среда окружения MS-DOS при работе под Windows ................ 548 Глава 13. Утилиты командной строки .................................. 569 ЧАСТЬ III. ВВЕДЕНИЕ В WINDOWS POWERSHELL Глава 14. Windows PowerShell ....................................... 620 Глава 15. Программирование в среде PowerShell ......................... 648 Глава 16. Использование PowerShell ................................... 708 ЧАСТЬ IV. ПРИЛОЖЕНИЯ Приложение А. Справочник по VBScript ............................... 740 Приложение Б. Справочник по языку CMD и пакетных файлов .............. 751 Приложение В. Указатель схем и учебных сценариев ..................... 761 Приложение Г. Справочник по программам командной строки .............. 768
Оглавление Об авторе ..................................................... 19 Посвящение .................................................... 19 Благодарности .................................................. 19 Введение .........................................................21 А зачем все это изучать? .......................................... 22 Структура книги ................................................. 24 Соглашения, используемые в данной книге ............................ 25 Соглашения по оформлению текста ............................... 25 Специальные элементы ......................................... 26 ЧАСТЬ I. СОЗДАНИЕ СЦЕНАРИЕВ С ПОМОЩЬЮ WINDOWS SCRIPT HOST Глава 1. Windows Script Host ........................................28 Что такое сценарий Windows? ...................................... 28 Что в WSH означает слово «Script»? ............................... 28 Что в WSH означает «Windows»? .................................. 29 Что в WSH означает слово «Host»? ................................ 31 Чем отличается создание сценариев от написания пакетных файлов? ...... 32 Языки сценариев ................................................ 32 VBScript .................................................... 33 JScript ..................................................... 34 Perl ........................................................ 34 Python ..................................................... 35 Open Object REXX ............................................. 35 Ruby ....................................................... 35 Выбор языка ................................................. 35 Простой сценарий ............................................... 36 Типы файлов сценариев ........................................... 39 JSE и VBE: Закодированные сценарии .............................. 40 Windows Script Files (WSF) ....................................... 41
Оглавление 7 Компоненты Windows Script (WSC) ................................ 42 Настройки WSH ............................................... 43 Создание своего первого файла сценария ............................. 43 Создание и защита папки сценариев ............................... 43 Создание сценария ............................................ 46 Средства редактирования сценариев ............................... 47 Как Windows запускает сценарии .................................... 48 Wscript и Cscript .............................................. 48 Способы запуска сценариев ..................................... 49 Передача информации в сценарии ................................ 51 Сохранение результатов работы сценариев .......................... 52 Ключи Wscript и Cscript ......................................... 53 Запуск своих собственных сценариев ................................. 57 Добавление указаний на сценарии в переменную PATH ................. 57 Запуск сценариев с помощью значка ярлыка ......................... 59 Создание ярлыка сценария ...................................... 59 Запуск сценариев из пакетных файлов ............................. 60 Автозапуск сценариев .......................................... 60 Проблемы безопасности ........................................... 61 Политика доверия и подписывание сценариев ....................... 62 Отладка сценариев .............................................. 63 Где можно получить дополнительную информацию ...................... 68 Глава 2. Руководство по VBScript ....................................69 Введение в VBScript .............................................. 69 Переменные ................................................. 70 Константы .................................................. 71 Поименованныеконстанты......................................72 Операторы и выражения ........................................ 74 Автоматическое преобразование .................................. 77 Управление ходом выполнения сценария .............................. 77 Оператор If ... Then ........................................... 78 Оператор Select Case .......................................... 80 Цикл Do While ................................................ 82 Прекращение выполнения цикла с помощью оператора Exit Do ........... 85 Вычисления с помощью оператора For...Next ......................... 86 Обработка коллекций и массивов с помощью цикла For...Each ............ 87 Функции VBScript ................................................ 88 Вызов функций и подпрограмм ................................... 88 Документация и синтаксис ...................................... 89 Функции работы со строками .................................... 90 Функции даты-времени ......................................... 94
8 Оглавление Взаимодействие с пользователем .................................... 98 Функция MsgBox() ............................................. 99 Функция InputBox() ........................................... 101 Вывод простых текстовых сообщений с помощью метода Wscript.Echo ..... 103 Более сложные темы, касающиеся VBScript ........................... 105 Обработка ошибок ........................................... 105 Процедуры: функции и подпрограммы ............................ 107 Массивы ................................................... 109 Область видимости переменных ................................. 111 Дополнительные источники информации ............................. 112 Глава 3. Создание сценариев и работа с объектами ...................113 Введение в объекты ............................................. 113 Классы и экземпляры ......................................... 115 Контейнеры и коллекции ...................................... 115 Обозначение объектов ........................................ 117 Использование объектов в VBScript ................................. 118 Автоматизация и файлы документов .............................. 119 Разница между свойствами и методами ............................ 120 Вложенные объекты .......................................... 121 Освобождение объектов ....................................... 122 Работа с коллекциями ......................................... 122 Использование объектов при работе с JScript .......................... 124 Чувствительность к регистру символов ............................ 124 Работа с коллекциями ......................................... 124 Использование объектов при работе с ActivePerl ........................ 126 Выполнение Perl-сценариев в WSH ............................... 126 Интерфейс с объектами, используемый в Perl ....................... 127 Работа с коллекциями ......................................... 128 Использование объектов при работе с ActivePython ..................... 129 Работа с коллекциями ......................................... 130 Использование объекта WScript .................................... 131 Извлечение аргументов командной строки ......................... 133 Поиск и использование необычных объектов .......................... 135 Глава 4. Доступ к файлам и реестру ................................142 Получение практических результатов ................................ 142 Работа с файлами и папками ...................................... 143 Scripting.FileSystemObject ...................................... 143 Объект Scripting.Drive ......................................... 155 Объект Scripting.Folder ........................................ 159 Объект Scripting.File .......................................... 165 Чтение и запись файлов .......................................... 170 Объект TextStream ........................................... 170 Чтение текста из файлов ...................................... 173
Оглавление 9 Запись текста в файлы ........................................ 174 Работа со стандартным вводом (Stdin) и стандартным выводом (Stdout) ... 180 Чтение двоичных файлов ...................................... 183 Чтение и запись XML ............................................ 187 Некоторые основы XML ........................................ 188 Чтение XML-файла ........................................... 197 Создание XML- или HTML-файла ................................. 199 Работа с программами и ярлыками .................................. 202 Объект WScript.Shell .......................................... 202 Запуск программ ............................................ 207 Создание и изменение ярлыков ................................. 214 Работа со средой окружения ....................................... 217 Извлечение информации из среды окружения ....................... 219 Управление установками среды окружения ......................... 220 Работа с реестром .............................................. 223 Изучение разделов и параметров реестра .......................... 224 Сохранение информации в реестре ............................... 224 Глава 5. Сетевые и принтерные объекты ............................228 Управление сетевыми и принтерными подключениями ................... 228 Извлечение сетевой пользовательской информации ..................... 233 Управления отображениями на буквы дисков .......................... 236 Создание перечня дисковых отображений с помощью EnumNetworkDrives .. 236 Добавление дисковых отображений .............................. 240 Удаление дисковых отображений ................................ 241 Установка отображений в сценарии .............................. 243 Управление подключениями сетевых принтеров ........................ 244 Вывод информации о принтерах ................................. 244 Подключениексетевымпринтерам ..............................246 Перенаправление принтеров из сеанса работы с DOS ................. 247 Удаление принтерных подключений .............................. 249 Установкапринтерапоумолчанию...............................251 Печать из сценариев ............................................. 251 Глава 6. Объекты сообщений и факсов ..............................254 Отправка из сценариев сообщений электронной почты с помощью CDO ...... 254 Объектная модель CDO .......................................... 255 Объект CDO.Message .......................................... 258 Работа с полями ............................................. 265 Поля для объекта CDO.Message .................................. 267 Коллекция CDO BodyParts ...................................... 269 Объект CDO BodyPart ......................................... 270 Объект ADO Stream .......................................... 273 Объект CDO.Configuration ...................................... 273
10 Оглавление Отправка сообщений с помощью CDO ................................ 279 Создание сообщения .......................................... 280 Добавление вложений ........................................ 284 Включение изображений в HTML-сообщение ........................ 285 Указание получателей и темы ................................... 286 Указание сервера доставки ..................................... 286 Отправка сообщения .......................................... 288 Объединениевсегопредыдущеговединоецелое ....................288 Отправка факсов из сценариев .................................... 293 Отправка факса с помощью сценария ............................. 297 Получение дополнительной информации об отправке факсов ........... 300 Глава 7. Инструментарий управления Windows .......................301 Введение в инструментарий управления Windows ....................... 301 Функции WMI ............................................... 302 Пространства имен ........................................... 303 Удаленное управление Windows ................................. 305 Создание WMI-подключений ...................................... 310 Иерархия объектов WMI ....................................... 311 Подключение с помощью объекта WbemScripting.SWbemLocator ......... 313 Подключение с помощью моникера ............................... 314 Подключение к локальному компьютеру ........................... 316 Безопасность и аутентификация ................................. 316 Определение режимов безопасности .............................. 321 WMI-коллекции и запросы ........................................ 323 SWbemServices .............................................. 324 WQL-запросы ............................................... 326 SWbemObjectSet ............................................. 327 SWbemObject ............................................... 328 SWbemMethodSet и SWbemPropertySet ............................ 330 Scriptomatic ................................................... 332 Примеры WMI ................................................. 334 Сбор системной информации ................................... 334 Управление принтерами ....................................... 335 Отслеживание пакетов обновлений Windows и критических обновлений ... 336 Управление службами и задачами ................................ 337 Дополнительные источники информации ............................. 339 Глава 8. Active Directory Scripting Interface ...........................341 Управление каталогом пользователя ................................. 341 Использование Active Directory Scripting Interface ..................... 342 Ограничения, накладываемые на ADSI при работе с Windows Script Host ... 343
Оглавление 11 Концепции ADSI ................................................ 344 Множественное наследование ................................... 346 Создание ADSI-объектов ....................................... 347 Безопасность каталогов ....................................... 350 Разница между контейнерами и листьями .......................... 352 ADSI-объекты для провайдера WinNT: ............................... 354 IADs ...................................................... 356 IADsCollection и IADsContainer ................................... 358 Работа с ADSI-коллекциями ..................................... 361 IADsComputer и IADsComputerOperations ........................... 362 IADsDomain ................................................ 365 IADsFileService и IADsFileServiceOperations .......................... 367 IADsFileShare ............................................... 370 IADsGroup .................................................. 371 IADsMembers ............................................... 373 IADsNamespaces .............................................373 IADsPrintJob и IADsPrintJobOperations ............................. 374 IADsPrintQueue и IADsPrintQueueOperations ......................... 376 IADsService и IADsServiceOperations .............................. 380 IADsSession ................................................. 384 IADsUser ................................................... 385 IIS и Exchange ................................................. 387 Управление Active Directory ........................................ 387 Терминология X.500 и LDAP .................................... 388 Объекты Active Directory .......................................... 391 RootDSE ................................................... 391 IADsO и IADsOU ............................................. 392 Разработка ADSI-сценариев........................................ 393 EzAD Scriptomatic ............................................... 395 Дополнительные источники информации ............................. 396 Глава 9. Использование сценариев для управления компьютерами и сетями .....................................................398 Использованиесценариеввреальноммире ...........................398 Разработка сценариев для других пользователей .................... 399 Использование WSF-файлов ....................................... 400 Справочник по формату WSF-файла .............................. 402 Предоставление справки в WSF-файлах ........................... 408 Обработка аргументов командной строки .......................... 409 Содержание более одного сценария в одном файле .................. 414 Объединениевсегопредыдущеговединоецелое ....................414 Развертывание сценариев в сети ................................... 418
12 Оглавление Создание простой программы установки с помощью IExpress .............. 419 Создание установочных сценариев или пакетных файлов IExpress ........ 422 Работа с контролем учетных записей пользователей .................. 424 Предоставление возможности отмены установки ..................... 426 Создание сценариев для управления другими компьютерами .............. 427 Удаленное выполнение сценариев ............................... 429 Репликация сценариев на несколько компьютеров ................... 430 Вопросы безопасности выполнения сценариев ......................... 432 Подпись сценариев ........................................... 434 Кодировщик сценария ......................................... 439 Созданиесценариеввходавсистему................................440 Сценарии входа в систему, определяемые в профиле пользователя ...... 441 Сценарии для входа в систему, выхода из нее и для других событий для Windows 7 и Vista ...................................... 442 Сценарии входа в систему, выхода из нее, запуска компьютера и команды на его выключение, связанные с групповой политикой ..... 443 Планирование автоматического запуска сценариев ..................... 446 Написание автоматически работающих сценариев ................... 447 Отправка сообщения в журнал событий ........................... 449 Планирование выполнения сценариев с помощью Планировщика заданий 453 Планирование запуска сценария ................................. 454 Проверка запланированного выполнения сценария ................... 456 ЧАСТЬ II. СРЕДА ОКРУЖЕНИЯ КОМАНДНОЙ СТРОКИ Глава 10. Командная строка CMD ...................................460 Окно командной строки .......................................... 460 Сравнение CMD и COMMAND .................................... 461 Запуск CMD ................................................... 462 Открытие окна командной строки с правами администратора ........... 463 Ключи оболочки CMD ......................................... 465 Запрещение расширений команд ................................ 466 Обработка командной строки ...................................... 467 Остановка программ, вышедших из-под контроля .................... 468 Консольная программа ввода и вывода ............................ 468 Использование окна консоли ................................... 470 Перенаправление ввода-вывода и каналы .......................... 470 Копирование и вставка в окнах командной строки .................... 474 Редактирование команд и список истории .......................... 475 Автозавершение имен ......................................... 477 Включение автозавершения имен каталогов ........................ 478 Использование нескольких команд в одной строке ................... 479 Группировкакомандспомощьюкруглыхскобок.....................480 Аргументы, запятые и кавычки .................................. 481 Отключение специальных символов .............................. 481
Оглавление 13 Конфигурирование программы CMD ................................. 482 AutoRun ................................................... 482 Подстановка переменных среды окружения ........................ 482 Путь поиска ................................................ 483 Предопределенные и виртуальные переменные среды окружения ........ 485 Установка исходных значений переменных среды окружения ........... 487 Встроенные команды ............................................ 488 Расширенные команды ........................................ 502 Вывод списка файлов с помощью команды Dir ....................... 504 Установка значений переменных с помощью команды set .............. 508 Условная обработка с помощью команды if ......................... 509 Сканирование списка файлов с помощью команды for ................. 511 Получение дополнительной информации ............................. 515 Глава 11. Пакетные файлы для пользы и развлечения ................517 Зачем нужны пакетные файлы? .................................... 517 Создание и использование пакетных файлов .......................... 518 Программирование пакетных файлов ................................ 521 Вывод информации в пакетных файлах .............................. 521 Подстановка аргументов ......................................... 522 Редактирование аргументов ....................................... 524 Условнаяобработкаспомощьюкомандыif............................525 Основная команда if .......................................... 525 Проверка наличия файлов и папок ............................... 526 Проверка успешности завершения программы ...................... 526 Выполнение после if нескольких команд ........................... 527 Расширенное тестирование ..................................... 528 Обработка нескольких аргументов .................................. 529 Работа с переменными среды окружения ............................. 532 Редактирование переменных среды окружения ...................... 533 Обработка нескольких элементов с помощью команды for ................ 534 Использование в цикле for нескольких команд ...................... 536 Отложенные расширения ...................................... 537 Использование подпрограмм пакетных файлов ........................ 539 Приглашение на ввод данных ...................................... 540 Полезные технологии пакетных файлов .............................. 541 Обработка ключей командной строки ............................. 541 Управление сетевыми отображениями ............................ 544 Проверка приемлемости аргументов .............................. 545 Ведение регистрационных журналов .............................. 545 Глава 12. Среда окружения MS-DOS при работе под Windows ...........548 Программы MS-DOS под управлением Windows ......................... 548 Виртуальная DOS-машина ...................................... 549 MS-DOS и COMMAND.COM ...................................... 551
14 Оглавление Конфигурация среды MS-DOS ...................................... 552 Параметры окна и памяти ...................................... 553 CONFIG.NT . ................ ................ ............... . 55 9 AUTOEXEC.NT ............... ................ ............... . 562 Переменные среды окружения MS-DOS ............................ 563 MS-DOS и работа в сети .......................................... 563 Вывод на печать из MS-DOS ....................................... 564 Перенаправление печати ...................................... 565 Распечатка содержимого экрана ................................. 565 Конфигурирование последовательной передачи данных при использовании MS-DOS .................................................... 566 Использование специализированных устройств для MS-DOS ............... 566 Управление программами MS-DOS .................................. 567 Если что-то пойдет не так ...................................... 568 Глава 13. Утилиты командной строки ...............................569 Программы командной строки Windows ............................... 569 Самыеценныепрограммыкоманднойстроки..........................570 Быстрый вызов GUI ............................................. 571 Универсальные программы оболочки ................................ 573 findstr ..................................................... 573 more ...................................................... 578 tree ....................................................... 579 xcopy ..................................................... 580 Средства управления файлами ..................................... 582 attrib ...................................................... 583 cacls ...................................................... 585 Эффективные средства управления ................................. 590 driverquery ................................................. 590 runas ..................................................... 591 tasklist .................................................... 592 taskkill ..................................................... 594 sc ....................................................... 595 Утилиты для работы с сетью ...................................... 597 ipconfig .................................................... 598 net ....................................................... 600 netstat .................................................... 610 Вывод списка активных подключений ............................. 611 nslookup ...................................................612 ping ...................................................... 615 tracert ..................................................... 616 Дополнительные утилиты ......................................... 618
Оглавление 15 ЧАСТЬ III. ВВЕДЕНИЕ В WINDOWS POWERSHELL Глава 14. Windows PowerShell .....................................620 Введение в Windows PowerShell .................................... 620 Объектно-ориентированная командная оболочка .................... 620 Основанная на .NET Framework .................................. 623 Расширяемая среда ........................................... 624 Получение Windows PowerShell ..................................... 625 Windows 7 .................................................. 625 Windows Vista и Windows XP .................................... 625 Windows Server 2008 R2 ....................................... 626 Windows Server 2008 R2 Server Core .............................. 626 Windows Server 2008 (pre-R2), 2003 R2 и 2003 ....................... 627 Windows Server 2008 (Pre-R2) Server Core .......................... 627 Среда PowerShell ............................................... 627 Окно командной строки PowerShell .................................. 629 Редактирование командной строки ............................... 629 Копирование и вставка ........................................ 631 Приостановка вывода и прекращение выполнения вышедшей из-под контроля программы .................................. 632 Синтаксис командной строки ................................... 632 И командлеты, и объекты, и сценарии, да когда же все это кончится! ........ 635 Получение справки ............................................. 638 Приглашение на завершение команд ................................ 640 Псевдонимы ................................................... 640 Как получить список псевдонимов ................................ 641 Как определить новый псевдоним ................................ 641 Переход по каталогам и другим местам .............................. 641 Безопасность PowerShell .......................................... 643 Сценарии PowerShell и контроль учетных записей пользователей ........ 643 Политика выполнения сценариев ................................ 644 Профили PowerShell ............................................. 646 Глава 15. Программирование в среде PowerShell ......................648 Язык программирования Windows PowerShell .......................... 648 Синтаксис Windows PowerShell ..................................... 649 Комментарии .................................................. 649 Переменные и типы ............................................. 650 Литеральные значения ........................................ 651 Свойства и методы объекта ..................................... 653 Конструкторы объектов ........................................ 654 Вставка в строки ............................................. 654 Специальные символы ........................................ 656 Конструкция Here-String ....................................... 656
16 Оглавление Освобождение переменных ..................................... 656 Предопределенныепеременные.................................657 Массивы ................................................... 659 Константы ................................................. 664 Выражения ................................................... 664 Сравнения с использованием массивов ............................ 667 Строковые операторы ......................................... 670 Оператор выполнения & ....................................... 672 Приоритетность операторов .................................... 673 Операторы присваивания ...................................... 674 Значения операторов ......................................... 675 Приведения к определенному типу ............................... 675 Передача по ссылке .......................................... 676 Хэш-таблицы ............................................... 677 Передача управления ........................................... 679 if ....................................................... 680 while ...................................................... 680 do...while и do...until .......................................... 681 for ....................................................... 681 foreach .................................................... 682 switch ..................................................... 684 break ..................................................... 686 continue ................................................... 687 Программные блоки .......................................... 687 Обработка исключений .......................................... 688 trap ....................................................... 688 try-catch-finally .............................................. 689 throw ..................................................... 690 Определение функций ........................................... 690 Аргументы функции .......................................... 691 Область видимости функций .................................... 694 Оператор Dot-Source .......................................... 695 Область видимости переменных ................................. 695 Функции, работающие с каналами, и фильтры ...................... 697 Применение сплат-оператора ................................... 699 Использование .NET API .......... ................ ................ 699 Вызов статических функций-членов класса ......................... 700 Работа со строками ........................................... 701 Работа с показаниями даты и времени ............................ 703 Преобразование значений ..................................... 706 Математические функции ...................................... 706
Оглавление 17 Глава 16. Использование PowerShell ................................708 Реальная работа с PowerShell ...................................... 708 Технология, использующая командную строку ......................... 710 Генерация объектов .......................................... 711 Фильтрация ................................................ 711 Переход к конкретным действиям ................................ 714 Форматирование вывода командлета ................................ 715 Оператор -f .. ................ ................ .............. . 715 Работа с файлами и папками ...................................... 717 Определение факта существования файла ......................... 722 Чтение текста из файлов ...................................... 722 Запись текста в файлы ........................................ 723 Идентификация файлов по размеру .............................. 724 Создание полезных сценариев ..................................... 725 Комментируйте свою работу! ................................... 725 Обработка командной строки ................................... 725 Создание модулей ............................................ 726 Обработка исключений как стратегия выхода ....................... 727 Использование хэш-таблиц ....................................... 729 Интегрированная среда сценариев PowerShell ......................... 730 Начало работы с PowerShell ISE ................................. 730 Конфигурирование ISE ........................................ 731 Создание и редактирование сценариев ............................ 732 Редактирование ............................................. 732 Запуск сценариев в ISE ........................................ 733 Установка контрольных точек и пошаговое выполнение ............... 734 Интерактивное исследование и изменение значений переменных ........ 735 Условные контрольные точки ................................... 736 Удаленное и фоновое выполнение PowerShell .......................... 737 Дополнительные источники информации ............................. 737 ЧАСТЬ IV. ПРИЛОЖЕНИЯ Приложение А. Справочник по VBScript .............................740 Свойства языка VBScript 5.6 ....... ................ ................ 740 Синтаксис .................................................... 740 Общая структура программы на VBScript ............................. 741 Типы данных и переменные ....................................... 741 Примечания к значениям даты и времени .......................... 742 Область видимости переменных ................................. 743
18 Оглавление Выражения и операторы .......................................... 743 Арифметические операторы .................................... 744 Операторы сравнения ......................................... 744 Логические операторы ........................................ 744 Операторы программы ........................................... 745 Функции ..................................................... 746 Интервалы, относящиеся к функциям дат .......................... 748 Предопределенные специальные значения ............................ 748 Свойства VBA, отсутствующие в VBScript .............................. 749 Приложение Б. Справочник по языку CMD и пакетных файлов .........751 Замена аргументов пакетного файла и переменной for ................... 752 Расширение переменных среды окружения ............................ 752 Предопределенные переменные среды окружения ...................... 753 Задание формата команд ......................................... 755 Встроенные команды............................................. 756 Модификаторы команды For .................................... 759 Операторы выражения set /a ................................... 760 Приложение В. Указатель схем и учебных сценариев .................761 Указатель схем ................................................ 761 Указатель учебных сценариев и пакетных файлов ...................... 762 Приложение Г. Справочник по программам командной строки .........768 Инструменты администрирования .................................. 768 Встроенные команды и команды пакетного файла ...................... 771 Команды DOS .................................................. 773 Команды для работы с файлами .................................... 774 Удобные программы ............................................. 775 Сетевой инструментарий ......................................... 776 Вспомогательные средства разработки программ ....................... 777 Утилиты TCP/IP ................................................ 777 GUI-программы Windows ......................................... 778
Об авторе Брайан Книттель (����� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� ����� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� � �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� чени� уже ��лее 30 лет. П��ле вы��лнени� ди�л��н�й ра��ты �� �ри�енению эле�тр�техни�и в ��ла�ти и��т��н�й �едицины и техн�л��ии ��лучени� и���ра� жений �ет�д�� �дерн��� �а�нитн��� ре��нан�а �н �ри�ту�ил � ра��те в �аче�тве не�ави�и���� ��н�ультанта. В �илу ра�н��лан�в��ти �а�р���в �в�их �лиент�в е�у �рих�дил��ь и�еть дел� � д�л��вре�енны�и �р�е�та�и в ��ла�т�х �едицин���й д��у�ентации, у�равлени� техн�л��иче��и�и лини��и, �и�те� у�равлени� �р�� и�в�д�твенны�и �р�це��а�и в реальн�� �а�шта�е вре�ени, и, чт� ��лее важн�, е�� �ра�тиче��ий ��ыт и���ль��вани� MS�DOS, W��dows и ����ьютерных �етей в �ире �и�не�а ���ил�� ��лее четверти ве�а. Брайан �тал ��авт�р�� �н�же�тва �ни�, вы�ущенных и�датель�тв�� Qu� — «W��dows 7 I� D�p�h», «Upg��d��g ��d R�p�����g M���oso�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� M���oso�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� M���oso�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� » и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� Sp����� �d���o� Us��g, ���в�� �d���o� Us��g, ���в�� �d���o� Us��g, ���в�� Us��g, ���в�� Us��g, ���в�� , ���в�� щенных W��dows V�s��, W��dows XP P�o��ss�o��� и Hom� �d���o�, а та�же W��dows 2000 P�o��ss�o���. Брайан живет в О�ленде, штат Калиф�рни�. В �в���дн�е вре�� �ани�ает�� в���тан�вление� анти�варных ����ьютер�в (�ри�ер �ред�тавлен на ве���айте www.ibm1130.org� и �тарает�� д�ве�ти д� ��вершен�тва �в�и реце�ты �ри��т�влени� �иццы на др�вах. Посвящение Пре��давател�� и в�е�у �ер��налу S�� R����� H�gh S�hoo�, давши� �не ��ра��ва� S�� R����� H�gh S�hoo�, давши� �не ��ра��ва� R����� H�gh S�hoo�, давши� �не ��ра��ва� R����� H�gh S�hoo�, давши� �не ��ра��ва� H�gh S�hoo�, давши� �не ��ра��ва� H�gh S�hoo�, давши� �не ��ра��ва� S�hoo�, давши� �не ��ра��ва� S�hoo�, давши� �не ��ра��ва� , давши� �не ��ра��ва� ние, �а ��т�р�е � д� �их ��р ежедневн� и��ытываю � ни� чув�тв� �ла��дарн��ти, ��у�т� ��лее 30 лет ���ле вы�у��а. Благодарности Не���ль�� лет на�ад � �е�ед�вал � и���лнительны� реда�т�р�� и�датель�тва Qu� Ри��� Ку�ен�� (R��k �ugh��� � не�л�хих, н� лишенных внешне�� л���а ин�тру�ентах и �р��ра��ах, �ред��тавл�е�ых �и�те��й W��dows, ин�тру�ентах, дл� ��т�рых �� ра�ны� �ричина� в�е ни�а� не нах�дил��ь �е�та в т�л�тых т��ах �ерий I� D�p�h и Sp����� �d���o� Us��g. В����жн�, � �а�тал е�� вра��л�х, ��т��у чт� �н ��а�ал, чт� � д�лжен на�и�ать ��� в�е� эт�� �ни�у, ��т�рую вы�у�тит и�� датель�тв� Qu�. В ре�ультате ���вил��ь эт� �ерера��танн�е и д���лненн�е вт�р�е и�дание ��д на�вание� «W��dows 7. С�ри�ты, авт��ати�аци� и ���андна� �тр��а».
20 От издательства Я ��ни�аю, чт� эт� — ��льша� че�ть дл� �ен�. Не �аждый день и�датель, �� �ути, ��в�рит �ледующее: «Е�ли ва� эта те�а в�лнует, т� на� �на в�лнует т�же». Ита�, дл� начала � х�чу выра�ить �ла��дарн��ть Ри�у Ку�ену �а е�� уверенн��ть в ��их �илах и в у��ехе данн��� �р�е�та и �а е�� неи��енную ��ддерж�у, тер�ение, ���� дрение, ру��в�д�тв� и еще ��льшее тер�ение. За в�е эт� и �а е�� д��р�желатель� н��ть и ве�елый нрав. Дл� �ен� �ыл� ��льш�й че�тью ра��тать � та�и� уважае�ы� и�датель�тв��, �а� Qu�. При ра��те над эти� неле��и� �р�е�т�� � и��ытал чув�тв� �ла��дарн��ти � а���циир�ванн��у и�дателю Гре�у Ви�анду (G��g W��g��d� и в�ей ��тальн�й выдающей�� ���анде и�датель�тва Qu�. Ра���рать�� в т��, чт� на�и�ан� в эт�й �ни�е, �ыл� �ы в���ще нев����жн�, или, �� �райней �ере, �на не ��рела �ы �в�ей ���ы�ленн�й ф�р�ы, не �рил�жи �в�ю ру�у � ее ра�ра��т�е и реда�тир�ванию Т�дд Бра��е (Todd ���kk��. Я �ла��дарен е�у �а е�� �р�ани�аци�нные у�а�ани� и энту�иа�� в ��д��р�е �атериала. Та�же � ве�ь�а �ла��дарен Ме�ан Вейд (M�g�� W�d�� �а ее �ри�тальн�е вни�ание �� в�е� �ел�ча� �ри литературн�� реда�тир�� � �а ее �ри�тальн�е вни�ание �� в�е� �ел�ча� �ри литературн�� реда�тир�� вании. Пу�ть эти ��и�ани� р�да де�тельн��ти не введут ва� в �а�луждение — �� �райней �ере, в и�датель�тве Qu� та�ие титулы, �а� «реда�т�р���н�ультант �� аудит�рии» и «литературный реда�т�р», не ����ут �ередать в�ю шир�ту в�лада �ажд��� уча�тни�а эт�й ���анды в �аждую �ни�у. Я та�же х�чу выра�ить �в�ю �ри�нательн��ть �а ��ддерж�у наше�у научн��у реда�т�ру Р�ну Барретту (Ro� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� Ro� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� �, ��т�рый тщательн� �р�в�дил �ра�тиче� ��ие и��ытани� �ажд�й уче�н�й �р��ра��ы и �ажд��� �ри�ера. Кр��е т���, е�ть цела� ар�и� людей, чей труд �ача�тую ��тает�� �е� вни�ани� и �ла��дарн��ти, людей вы��лн�ющих реальную ра��ту. От издательства Ваши �а�ечани�, �редл�жени�, в��р��ы �т�равл�йте �� адре�у эле�тр�нн�й ��чты comp@piter.com (и�датель�тв� «Питер», ����ьютерна� реда�ци��. На ве���айте и�датель�тва (www.piter.com� вы ��жете ��ачать архив � д���лни� тельны�и �атериала�и � эт�й �ни�е. Мы �уде� рады у�нать ваше �нение! На ве���айте и�датель�тва http://www.piter.com вы найдете ��др��ную инф�р�а� цию � наших �ни�ах.
Введение Не���тр� на т� чт� у эт�й �ни�и ��вершенн� н�в�е на�вание, на �а��� деле эт� ��н�вленн�е и и��равленн�е вт�р�е и�дание �ни�и «W��dows XP: U�d�� Th� Hood» («Чт� та� ��д �а��т�� у W��dows XP»�. Та��е «авт����ильн�е» на�вание �ерв��� и�дани� р�дил��ь �ла��дар� ��ей н��таль�ии, ра�дел�е��й �� �н��и�и дру�и�и людь�и: ра�ве ва� не �хватывает т���а �� �тары� д��ры� вре�ена�, ���да ��жн� �ыл� ��дн�ть �а��т вашей �ашины и ра����нать в�е, чт� ��д ни� нах�дит��? К��да ��жн� �ыл� в��ть �аечный �люч и �а���у у�транить �ра�тиче��и лю�ую неи��равн��ть? Те�ерь �ашины уже не те, �ни �тали на�т�ль�� �л�жны�и и �т� �у�ивающи�и, чт� �л�жн� даже �ред�тавить �е�е �����ни�удь, �т� �танет в них ��выр�ть�� в наши дни. У �н��их и� на� в��ни�ли �х�жие чув�тва и �� �тн�шению � W��dows. Эта ��ераци�нна� �и�те�а �ревратил��ь в �и�анта, ��ъедин�юще�� ты��чи �л�жных ���тавных ча�тей, ��р�тавших�� �а та�и� �лад�и�, н� �ажущи��� не�р�ницае�ы� �рафиче��и� интерфей��� ��ль��вател� (GUI�. Эта �ни�а �вл�ет�� ���ыт��й вернуть�� � те� дн��, ���да �ы ���ли � уверен� н��тью и уд�в�ль�твие� ��выр�ть�� в наших �ашинах. W��dows ���тавл�ет�� � эффе�тивны� на��р�� ин�тру�ент�в и интерфей��в, ��т�рые ���в�л�ют в��ть ��д ��нтр�ль лю�ую �ел�чь, е�ли вы, ��нечн�, х�тите �а�атать ру�ава и в нее ��� �ру�ить��. Ке� �ы вы ни �ыли, �и�те�ны� ад�ини�трат�р�� или «��ытны� ��ль��вате� ле�», нах�д�ще��� в ���т��нн�� ��и��е ��лее эффе�тивных �������в и���ль��ва� ни� �в�е�� ����ьютера, вы, в����жн�, �на���ы � �а�етны�и файла�и, �ценари��и и �р��ра��а�и ���андн�й �тр��и. При в�ей �в�ей �ажущей�� не�ривле�ательн�� �ти �ни �уще�твуют д�льше �а���� �ер��нальн��� ����ьютера, и ран� или ���дн� лю��й, �т� и���ль�ует ����ьютер дл� �ерье�н�й ра��ты, � ни�и �тал�ивает��. Они ���ут �а�ать�� че��т� �тар���дны�, н� �ни �р�д�лжают ра�вивать�� в�е�те � W��dows. Сред�тва авт��ати�ации, �ред��тавл�е�ые в�е�те � W��dows, невер�� W��dows. Сред�тва авт��ати�ации, �ред��тавл�е�ые в�е�те � W��dows, невер�� . Сред�тва авт��ати�ации, �ред��тавл�е�ые в�е�те � W��dows, невер�� W��dows, невер�� , невер�� �тн� эффе�тивны и ��ле�ны. Те� не �енее дл� ��льшин�тва людей �ни ��тают�� че��т� �а�ад�чны� и ред�� в��тре�уе�ы�. Я на�и�ал эту �ни�у, чт��ы ра�ве�ть таин�твенн��ть. При эт�� � ���тавил �еред ����й ��ть �адач: y Научить ��ль��вать�� �а�етны�и файла�и и ��ы�а�и на�и�ани� �ценариев, �ред��тавл�е�ы�и W��dows.
22 Введение y П��а�ать ��р�д�� и���ль��вани� утилит ���андн�й �тр��и и ��ъе�т�в �цена� риев в �аче�тве ��в�едневн��� ин�тру�ентари�. y Пред��тавить введение и ��рав�чн�е �����ие дл� ��тен �р��ра�� ���андн�й �тр��и и ��ъе�т�в �ценариев, ���тавл�е�ых в�е�те � W��dows. y Пред��тавить введение в W��dows Pow��Sh���, н�вейшее �ред�тв� M���oso�� дл� авт��ати�ации � и���ль��вание� интерфей�а ���андн�й �тр��и. y И, �режде в�е��, ���а�ать ва�, �а� ��жн� научить�� ��ль��вать�� в�е�и эти�и �ред�тва�и. Ни �дна �ни�а не ���жет решить в�ех ваших �р��ле�, �в��анных � W��dows. Данна� �ни�а учит, �а� ра��тают в�е эти �ред�тва и �а� �ф�р�ир�� W��dows. Данна� �ни�а учит, �а� ра��тают в�е эти �ред�тва и �а� �ф�р�ир�� . Данна� �ни�а учит, �а� ра��тают в�е эти �ред�тва и �а� �ф�р�ир�� вать �в�и у�или� �� ���данию �ценариев, чт��ы �т�йти �т �тандартных решений и �рийти � �в�и� ����твенны�. Х�т� на �нижн�� рын�е ��жн� найти не���ль�� �ни�, ���в�щенных W��dows S���p� Hos�, W��dows Pow��Sh���, �ред�тва� авт��ати�ации W��dows, а та�же �дну�две �ни�и, ��и�ывающие утилиты ���андн�й �тр��и, эт� един�твенна� и� и�ве�тных �не �ни�, �де в�е четыре ���тавл�ющие ���раны в�един�. В данн�й �ни�е речь идет ��н�ретн� � W��dows 7, V�s�� и XP. М�жн� та�же в����ль��вать�� ��и�ывае�ы�и техн�л��и��и �ри ра��те � ��ераци�нны�и �и�те� �а�и W��dows S��v�� и W��dows 2000 P�o��ss�o���, е�ли, ��нечн�, вы ����режне�у и�и ��ль�уете�ь. А зачем все это изучать? В ве� �рафиче����� ��ль��ватель����� интерфей�а �атраты вре�ени на и�учение �ценариев, �а�етных файл�в и �р��ра�� ���андн�й �тр��и ���ут вы�вать нед�� у�ение. Неужели �ни не �тали ча�тью �р�шл���, че��т�, чт� ��жн� �� в�д�х�� ��ле�чени� ��тавить ���ади? Е�ли че�тн�, т� � та� не ду�аю, иначе не �тал �ы ради ва� �е��ца�и �идеть д����дна �а �лавиатур�й. И е�ли т�ль�� �дн��� ваше�� ��чув�тви� дл� ���у��и данн�й �ни�и нед��тат�чн�, т� у �ен� на эт�т �чет е�ть дл� ва� р�д в��лне у�еди� тельных д�в�д�в. Дл� начала �риведу не���ль�� важных �а�ечаний �тн��ительн� �ценариев и �а�етных файл�в: y Они ���в�л�т ва� �ы�тр� ��равить�� � решение� ��вт�р�ющих�� �адач. К��� да в ваше� ра���р�жении ��льш�е ��личе�тв� ��ра�атывае�ых файл�в или эле�ент�в данных или ���да и�� дн� в день вы��лн�ют�� �дни и те же �адачи, авт��ати�аци� ���в�лит �э��н��ить �а��у вре�ени. К�нечн�, ��жн� щел�ать на ра�ных эле�ентах, �а�у��а� файл в не���ль�их ра�ных �р��ра��ах или д�� �авл�� ��ль��вател� � вашей �ети, н� ���да в�е эт� нужн� делать не���ль�� ��тен ра�, �рафиче��ий ��дх�д � решению эт�й �адачи ��жет �ревратить�� в на�т��щий ��ш�ар. y Они �а�лючают в �е�е ��ределенные �ведени� и �лужат в �аче�тве ра�н�вид� н��ти д��у�ентации, �����ль�у в них чет�� �р��и�ывает�� ��р�д�� вы��лне�
А зачем все это изучать? 23 ни� �адачи. Е�ли вы на�и�али �ценарий или �а�етный файл дл� вы��лнени� �а�их�ни�удь фун�ций у�равлени�, �ни ��у�т� ��ды ���ут на���нить ва� или ваши� ���лед�вател��, че� и�енн� �ни �ани�ают��. В эт�� е�ть �в�й в��лне ��ределенный �ра�тиче��ий ��ы�л. y Они ���в�л�ют и���ль��вать в �аче�тве ин�тру�ент�в дл� на�и�ани� ваших ����твенных �р��ра�� «внутренн��ти» та�их �ри�ладных �р��ра��, �а� Wo�d и �x���. y Они ���в�л�ют ���давать �р�цедуры, ������ные ра��тать � файла�и, и на�тра� ивать не т�ль�� ваш ����твенный ����ьютер, н� и �� �ети на�траивать дру�ие ����ьютеры вашей �р�ани�ации. Е�ли ��д ваши� у�равление� нах�д�т�� де��т�и или ты��чи ����ьютер�в, фун�ции, ���ещае�ые в �ценарии, ���ут «�р�дви�ать» и��енени� в «��дшефные» ����ьютеры, не тре�у� ваше�� фи�и� че����� ��нта�та � �ажды� и� них. y Они ���в�л�ют ���давать �р�цедуры дл� «�ере�а�у��а» и в���тан�влени� ����ьютерн�й �реды ��ружени� д� �тандартн�й, и�ве�тн�й ��нфи�урации. В ча�тн��ти, �ценарии вх�да в �и�те�у ���ут на�траивать �ринтеры, ���давать �т��ражени� �етевых ди���в и �дина��в� на�траивать Панель у�равлени� �ри �ажд�� вх�де ��ль��вател� в �и�те�у, и��авл�� ва� �т ут��ительн�й ��ддерж�и и ��ль��вател� — �т �атруднений. Е�ли в�е эт� — ��в�д научить�� ���давать �ценарии и �а�етные файлы, т� чт� т��да ��жн� ��а�ать �� утилитах ���андн�й �тр��и? А в�т чт�: y Мн��ие ад�ини�тративные, ���луживающие и в���тан�вительные фун�ции W��dows не фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� не фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� �реде. Их ��жн� найти т�ль�� в �р�� �реде. Их ��жн� найти т�ль�� в �р�� . Их ��жн� найти т�ль�� в �р�� Их ��жн� найти т�ль�� в �р�� �ра��ах ���андн�й �тр��и. y Ин��да на�н��� �ы�трее на�рать �ару �у�в, че� выи��ивать чт��ни�удь на э�ране � ����щью �ыши! y П����ль�у ��льшин�тв� утилит ���андн�й �тр��и ра��читан� на ра��ту � фай� ла�и данных или те��т�вы�и файла�и � т�й или ин�й ��н�ретн�й ��ль��й, �р��ра��ы ���андн�й �тр��и �ача�тую ��жн� и���ль��вать в �аче�тве �тр�� ительных �л���в дл� вы��лнени� та�их �л�жных �адач, �а� ��ртир�в�а, и�� влечение и ф�р�атир�вание инф�р�ации. В�е�т� на�и�ани� ��ециальн� �ред� на�наченн�й �р��ра��ы, ин��да ��жн� дл� вы��лнени� �адачи и���ль��вать череду �р��ра�� ���андн�й �тр��и, ��тратив на эт� на�н��� �еньше у�илий. Пр��ра��ы ���андн�й �тр��и ��жн� ра���атривать в �аче�тве �в�е��ра�ных н�жниц и �те�лера на ра��че� �т�ле ваше�� ����ьютера. Х�т� W��dows GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� W��dows GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� �ание, нетрудн� �а�етить, чт� эти ��рытые ин�тру�енты и �вл�ют�� на�т��щей «�л�тью» ��ераци�нн�й �и�те�ы W��dows.
24 Введение Структура книги Кни�а �т начала д� ��нца ���тр�ена д��тат�чн� л��ичн�, н� �на на�и�ана та�и� ��ра���, чт� вы ��жете �ри�ту�ить � чтению � лю���� �е�та, �ы�тр� ��лучить нужную инф�р�ацию и �тл�жить �ни�у в �т�р�ну. Ее не����ательн� читать �т ��р�и д� ��р�и и те� ��лее не����ательн� штудир�вать ру��в�д�тва. (Е�ли вы уже �на���ы � ра���атривае�ы�и те�а�и, ��ветую ва� �р����треть ��рав�чный �атериал, �����ль�у ��ы� �а�етных файл�в и �р��ра��а W��dows S���p� Hos� �ен�ли�ь и ра�вивали�ь.� Эта �ни�а ра��ита на четыре ча�ти. В�т �рат��е ��держание �ажд�й и� них. y Ча�ть I «С��дание �ценариев � ����щью W��dows S���p� Hos�» ���в�щена ин�тру�ентарию W��dows S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� W��dows S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� Hos�, в ней дает�� введение в ��ы� �р��ра�� Hos�, в ней дает�� введение в ��ы� �р��ра�� , в ней дает�� введение в ��ы� �р��ра�� �ир�вани� V�S���p�, ра���атривает�� и���ль��вание ��ъе�т�в и ��и�ывают�� �р�це��ы на�и�ани� и �тлад�и �ценариев. Кр��е эт��� в данн�й ча�ти �ред�� �тавл�ет�� ��др��ный ��рав�чни� �� �н��и� ��ъе�та� �ценариев, �ред��тав� л�е�ых �и�те��й W��dows. y Ча�ть II «Среда ��ружени� ���андн�й �тр��и» ���в�щена ���андн��у ��ы�у W��dows, и���ль�уе���у дл� на�и�ани� �а�етных файл�в. Я�ы� �а�етных фай� , и���ль�уе���у дл� на�и�ани� �а�етных файл�в. Я�ы� �а�етных фай� л�в, �� �равнению �� �в�и� MS�DOS��р�т�ти���, �ыл �уще�твенн� улучшен и �тал на�н��� ��лее ��ле�ны� �ред�тв�� авт��ати�ации ра��ты � файла�и и �атал��а�и. В� вт�р�й ча�ти та�же ра���атривает�� �реда ��ружени� ��� �андн�й �тр��и, э�ул�ци� MS�DOS и ������ы и��енени� �реды ��ружени� � ����щью ад�ини�тративных ин�тру�ентальных �ред�тв. В ��нце �риведен ����р ���л� 20 наи��лее важных �р��ра�� ���андн�й �тр��и, ���тавл�е�ых � W��dows, �уда вх�д�т �ред�тва у�равлени� те��т�вы�и файла�и, утилиты дл� ра��ты � �ет��и, �рлы�и �рафиче����� ��ль��ватель����� интерфей�а и �н���е дру��е. y Ча�ть III «Введение в W��dows Pow��Sh���» дает �ред�тавление � W��dows Pow��Sh���, н�вейшей и �а��й не��ычн�й �реде вы��лнени� �ценариев ��� , н�вейшей и �а��й не��ычн�й �реде вы��лнени� �ценариев ��� �андн�й �тр��и. Pow��Sh��� �вл�ет�� эффе�тивны� и �в�е��ра�ны� ��ы��� �р��ра��ир�вани�. Е�� ��жн� и���ль��вать дл� вы��лнени� универ�альных вычи�лений, дл� ��ра��т�и файл�в и данных лю���� ти�а и дл� у�равлени� ра��чи�и �танци��и W��dows, �ервера�и и �рил�жени��и. Не���ненн�, эт�т ��ы� �а�луживает и�учени�. y И на��нец, Ча�ть IV «Прил�жени�» �ред��тавл�ет �рат�ие ��рав�чни�и и у�а� IV «Прил�жени�» �ред��тавл�ет �рат�ие ��рав�чни�и и у�а� «Прил�жени�» �ред��тавл�ет �рат�ие ��рав�чни�и и у�а� �атели на те ин�тру�ентальные �ред�тва, ��т�рые ра���атривают�� в данн�й �ни�е. Та�, �де эт� в����жн�, в�лючают�� ��ыл�и на �траницы ра�дел�в данн�й �ни�и, �де ��жн� найти ��лее ��др��ную инф�р�ацию. В эт�й ча�ти та�же �ред�тавлен у�а�атель уче�ных �ценариев и �а�етных файл�в, ��т�ры�и ��жн� в����ль��вать�� в �аче�тве �т�равных т�че� дл� ���дани� ваших ����твенных �р�е�т�в. В�е �ценарии и файлы ��жн� �а�ру�ить � ве���айта www.helpwin7.com/ scripting. Та� же ��жн� найти д���лнительные ��ну�ные �рил�жени�, ��т�рые, не���тр� на в�е наше желание, не ����ли ���е�тить�� в �ечатн�� и�дании.
Соглашения, используемые в данной книге 25 В�е �лавы ���тр�ены �� един��у ша�л�ну. В� в�ту�лении ра���а�ывает�� � ��н�ретн�� ин�тру�енте или �хе�е �р��ра��ир�вани�, в ��рав�чн�� ра�деле ин�тру�ент ��и�ывает�� в� в�ех ��др��н��т�х, а в ��нце �лавы ра���атривает�� и���ль��вание ин�тру�ента в �ра�тиче��их �адачах. Та�ую �тру�туру � вы�рал ��� т��у, чт� �не х�тел��ь, чт��ы �ни�а вы�ту�ала �дн�вре�енн� в �аче�тве уче�ни�а дл� н�вич��в и в �аче�тве ��рав�чни�а дл� читателей, уже �на���ых � данны�и техн�л��и��и, н� желающих �ы�тр� ��вежить �в�и �нани�. Мне та�же х�тел��ь �ридать �атериалу не�ий �ти�улирующий хара�тер. На� чальные �лавы, ���в�щенные W��dows S���p� Hos� и ��ъе�та�, ��льше �твечают «��учающе�у» ��дх�ду, н� �ате� те�� и�л�жени� �атериала увеличивает��. Соглашения, используемые в данной книге Чт��ы ����чь ва� �лу�же у�в�ить �атериал данн�й �ни�и, �де�ь и���ль�уют�� ��в�е�е�тн� и���ль�уе�ые ��ециальные ���лашени� и эле�енты. Соглашения по оформлению текста Принци�ы, и���ль��ванные в �ф�р�лении те��та, ���в�л�ют идентифицир�вать ��н�ти� и дру�ие ��ециальные ��ъе�ты. Соглашение Значение Курсив Н�вые, в�ервые ��редел�е�ые ��н�ти� или выражени� Моноширинный шрифт Инф�р�аци�, ���вл�юща��� в ��де или на э�ране или на�ирае�а� ва�и на �лавиатуре Клавиатурные ����инации Клавишные ����инации �ред�тавлены �на��� �лю�. На�ри�ер, е�ли в те��те �редла�ает�� нажать Ctrl+Alt+Delete, т� �ледует �дн�вре�енн� нажать �лавиши Ctrl, Alt и Delete. В ��и�ани�х �инта��и�а, �р��ра��ных ин�тру�ций и ��ъе�т�в и���ль�уют�� �ледующие ���лашени�. Соглашение Значение Жирный_шрифт() Те��т и �и�в�лы, выделенные жирны� шрифт��, на�ирают�� �у�� вальн�. курсив Кур�ив�� выделены и�ена и �начени�, ��т�рые тре�ует�� �а�енить ваши�и ����твенны�и данны�и. [ключи] Квадратные �����и ���а�ывают не����ательные, д���лнительные эле�енты. Са�и �����и на�ирать не нужн�. {вариант A | вариант �} Фи�урные �����и и верти�альна� черта (|� �лужат �ри�на��� эле�ен� та, дл� ��т�р��� нужн� �делать вы��р и� двух вариант�в. элемент [, элемент ...] Тр�ет�чи� �лужат �ри�на��� эле�ент�в, ��т�рые ���ут ��вт�р�ть�� �р�и�в�льн�е ��личе�тв� ра�.
26 Введение Специальные элементы На �траницах эт�й �ни�и вы увидите ��рав�чные ��и��и, �хе�ы, ��веты, �ри�еча� ни�, �реду�реждени�, �ере�ре�тные ��ыл�и и вре��и. Эти эле�енты �тличают�� �т в�е�� ��тальн��� те��та, чт��ы �ривлечь ваше вни�ание. СПРАВКА С�рав�а ��и�ывает �инта��и� и ��р�д�� и���ль��вани� �р��ра��ных ин�тру�� ций, �в�й�тв и �ет�д�в ��ъе�т�в и �р��ра�� ���андн�й �тр��и. ШАБЛОН Шаблоны показывают способы решения конкретных задач программирования в том виде, ко- торым можно воспользоваться во многих ситуациях. Они предоставляют универсальный способ решения тех или иных вычислительных задач. ▼▼ ▼Советы подсказывают более быстрые, безопасные и надежные способы выполнения тех или иных действий или получения результатов, превращая вас в настоящих знатоков своего дела. ПРИМЕЧАНИЕ ▼) ▼Примечаниями выделяются те элементы, на которые нужно обратить внимание. Иногда они просто содержат некую исходную информацию относительно изучаемой темы, но чаще всего они обращают внимание на особые обстоятельства и потенциальные подвохи, которые могут проявиться у некоторых свойств Windows. ▼o Обязательно изучайте все предупреждения! Они помогут сэкономить драгоценное время, убе- регая вас от утраты уже проделанной работы. Перекрестные ссылки Эти ��ыл�и у�а�ывают на дру�ие �е�та в данн�й �ни�е, �де �ред��тавл�ет�� д�� ��лнительна� или в������ательна� инф�р�аци�. Пере�ре�тные ��ыл�и и�еют �ледующий вид: ➔ Д���лнительную инф�р�ацию � �ерф��арте Х�ллерита ��жн� найти в �лаве 1 «W��dows S���p� Hos�». Эт� инф�р�аци�, д���лн�юща� ра���атривае�ую те�у. Эти �ведени� �редна� �начены дл� тех, ���� интере�ует ��лее �лу����е и�учение ����енн��тей �ри� л�жени� или �адачи.
Создание сценариев с помощью Windows Script Host I
Windows Script Host Сначала �ы ра����три� �ехани�� на�и�ани� и �а�у��а файл�в �ценариев. y Зде�ь вы найдете ����рную инф�р�ацию �� ���данию �ценариев, ��ы�а� �це� нариев и ���анда�, и���ль�уе�ы� дл� �а�у��а �ценариев. y Вернитеть ���днее � эт�й �лаве, чт��ы ��вежить �в�и �нани� �� �тладчи�е �це� нариев. y В ���ледне� ра�деле дана ��д��а��а, �де в Интернете ��жн� найти �тветы на в��р��ы �� ���данию �ценариев и ��лучить д���лнительную инф�р�ацию. Что такое сценарий Windows? На эт�т в��р�� ��жн� �тветить ��р�т��: «Пр��ра��а, на�и�анна� на интер�рети� руе��� ��ы�е � д��ту��� � �����нента� ��ераци�нн�й �и�те�ы чере� ��ъе�тную ��дель COM». При в�ей �в�ей т�чн��ти эт�т �твет вр�д ли �удет ��ле�ен ���у� ни�удь, �р��е ��ециали�та, ра��тающе�� в ��ла�ти ����ьютерных нау�. Я ��ла�аю, чт� � ���дании �ценариев важн� �нать в�е�, ��эт��у давайте ���р��уе� �тветить на эт�т в��р�� еще ра�, н� те�ерь уже на ��щед��ту�н�� ��ы�е. Что в WSH означает слово «Script»? Чт��ы ��ъ��нить, чт� та��е �ценарий (s���p�� и ��че�у ��жн� �аинтере��вать�� е�� ���дание�, ��трати� не�н��� вре�ени на ��ду�ывание и�х�дн���, �у�вальн��� ��ы�ла �л�ва сценарий. Театральный �ценарий — эт� план, ���лед�вательн��ть ин�тру�ций дл� ���тан�в�и �ье�ы. В�е не��х�ди�ые �л�ва нар�ду � у�а�ани��и, ����щающи�и а�тера�, �уда дви�ать�� и чт� делать �� х�ду �ье�ы. Сценарий �ред� �тавл�ет ����й �лан, ра��читанный на а�тер�в, ������ных вы��лнить фа�тиче��ую ра��ту. Сценарий ���уждает этих а�тер�в � вы��лнению �на���ых дей�твий и� реальн�й жи�ни, и делать эт� �н�ва и �н�ва, �т�ль�� ра�, ���ль�� �удет и�рать�� �ье�а... а вам ��танет�� т�ль�� �идеть и на�людать �а �р�и�х�д�щи�. 1
Что такое сценарий Windows? 29 Вы уже, наверн�е, д��адали�ь, чт� в ��ы�ле �р��ра��н��� ��е��ечени� �цена� рий — эт� ра�н�видн��ть ����ьютерн�й �р��ра��ы, н� �л�в� «�ценарий» ��дчер� — эт� ра�н�видн��ть ����ьютерн�й �р��ра��ы, н� �л�в� «�ценарий» ��дчер� — эт� ра�н�видн��ть ����ьютерн�й �р��ра��ы, н� �л�в� «�ценарий» ��дчер� �ивает у����нутые ранее ���енты: y Сценарии на�и�аны на ��лее��енее �ривычн�� �р��т�� ��ы�е. y Сценарии ��ль�уют�� ������ны�и а�тера�и, чт��ы ��равить�� � не�р��т�й ра��т�й. Они �р��т� ��в�р�т а�тера�, чт� нужн� делать. y Сценарии вы��лн�ют дл� ва� �ра�тиче��ие �адачи, а ва� ��тает�� лишь �идеть и на�людать �а в�е� �р�и�х�д�щи�. С��дание �ценариев не �вл�ет�� �а�и��т� н�вы� ��н�тие� . Пр��ра��ы и ��е� раци�нные �и�те�ы, начина� � Au�oCAD и �а�анчива� ��OS, в�лючали эти в����ж� Au�oCAD и �а�анчива� ��OS, в�лючали эти в����ж� и �а�анчива� ��OS, в�лючали эти в����ж� ��OS, в�лючали эти в����ж� �OS, в�лючали эти в����ж� OS, в�лючали эти в����ж� , в�лючали эти в����ж� н��ти уже не �дн� де��тилетие. Та��е �ред�тв�, �а� W��dows S���p� Hos� (WSH�, в�ервые ���вил��ь в W��dows 95 S��v��� R����s� 2, х�т� даже �ейча� � не� �нают лишь не�н��ие ���в�щенные. И, �а� �удет ���а�ан� в �ледующих �лавах, �н� �ред��тавл�ет ва� д��ту� � шир����у �н�����ра�ию и���лнителей (�����нента� �р��ра��н��� ��е��ечени� и �р��ра��а��, у�еющих ��ра�атывать данные, у�рав� л�ть ����ьютер�� и ��вышающих та�и� ��ра��� эффе�тивн��ть вы��лнени� вашей ра��ты. Что в WSH означает «Windows»? WSH ���в�л�ет ���давать �ценарии дл� ра��ты � файла�и, ��ра��т�и данных, и��енени� на�тр�е� ��ераци�нн�й �и�те�ы, у�тан�в�и и удалени� на�тр�е� �р�� �ра��н��� ��е��ечени�, �т�рав�и эле�тр�нн�й ��чты и т. д . Сценарии ��вершают эти дей�тви�, �ред��тавл�� ва� д��ту� � дру�и� �р��ра��а�, вы��лн�ющи� фа�тиче��ую ра��ту. Мн��ие и� этих �р��ра�� ���тавл�ют�� в�е�те � W��dows, а д���лнительные �р��ра��ы ��жн� д��авить уже ���ле у�тан�в�и ��ераци�нн�й �и�те�ы. В�е �ни — а�теры в нашей театральн�й ��дели. Эт� д�в�льн� ��щна� иде�, ��т��у чт� �а��й �р��ра��е��ценарию нужн� лишь ����щить дру�и� �р�� �ра��а�, чт� �т них тре�ует��, и не нужн� �нать ��др��н��тей вы��лн�е��й ра��ты. Эт� �начит, чт� диа�а��н ��вершае�ых ваши� �ценарие� дей�твий не ��раничен в����жн��т��и, в�тр�енны�и в ��ы� �ценариев, и �р�це�� ���дани� �ценариев W��dows ��жет ��ра�тать в�е н�вы�и и н�вы�и в����жн��т��и. На жар��не M���oso�� внешние �р��ра��ные �����ненты, � ��т�рых идет речь, у�а��ваны в виде ��ъе�т�в. О�ъе�ты — эт� �а��д��тат�чные �р��ра��ные ��дули, вы��лн�ющие �адачи дл� дру�их �р��ра�� чере� на��р чет�� ��ределенных �р�� �ра��ируе�ых ��ыл��. О�ъе�ты �ача�тую �редна�начены дл� �ред�тавлени� не�их ��ъе�т�в реальн��� �ира или �а�их�ли�� ��н�тий, та�их �а� файл, эле�тр�нна� та�лица или учетна� �а�и�ь ��ль��вател� ����ьютера, а �р��ра��ные ��ыл�и дают дру�и� �р��ра��а�, на�ри�ер �ценари��, ������ ��лучени� инф�р�ации и ��уще�твлени� у�равлени� в �ределах �ред��тавленных ��лн���чий. К эт�й ��нце�ции нужн� �ривы�нуть, и и�енн� ей ���в�щена �лава 3 «С��да� ние �ценариев и ра��та � ��ъе�та�и». А ���а �ледует лишь �т�етить, чт� �ред�тв� WSH ���тавл�ет�� � ��ъе�тны�и �����нента�и, �ред��тавл�ющи�и д��ту� � фай� ���тавл�ет�� � ��ъе�тны�и �����нента�и, �ред��тавл�ющи�и д��ту� � фай�
30 Глава 1. Windows Script Host ла� и �а��а�, � �и�те�е эле�тр�нн�й ��чты, � �и�те�е ���ена данны�и �� �ети, � �луж�а� W��dows и драйвера� у�тр�й�тв, � �луж�е �атал���в A���v� D�����o�y и �� �н��и� дру�и� ча�т�� W��dows. Приведе� ��н�ретный �ри�ер: �ред��л�жи�, чт� ��� ра��та ча�тичн� ���т�� ит и� т���, чт� люди �ри�ылают �не д��у�енты Wo�d, ��т�рые нужн� ра���лать не���ль�и� �ред�тавител�� �р�ани�ации (�у�ть эт� �удут �а�р��ы на �т�у���. Д��у�енты ���ту�ают �� эле�тр�нн�й ��чте в лю��е вре�� �ут��, и � храню �ри�ре�ленные д��у�енты в �а��е. Каждый день в 17 ча��в � д�лжен �т�равить ру��в�д�тву ����ании �� эле�тр�нн�й ��чте увед��лени� � ���ту�ивших �а день �а�р��ах, в�лючив их в ����щение в �аче�тве вл�жений. Я ���у ежедневн� вы��лн�ть в�ю эту ра��ту вручную, н� � та�же ���у на�и�ать �ценарий, ��т�рый в�е эт� �делает �а �ен�. П� �дн��у ��е�у щелч�у �ценарий ��жет в����ль��вать�� в�тр�енны�и ��ъе�та�и W��dows дл� вы��лнени� �леду� W��dows дл� вы��лнени� �леду� дл� вы��лнени� �леду� ющих �адач: 1. П�лучить ��и��� в�ех файл�в и� �а��и «На �т�рав�у». 2. С��тавить ����щение эле�тр�нн�й ��чты и адре��вать е�� ��и��у ру��в�д�тва. 3. При�ре�ить �аждый и� файл�в � ����щению эле�тр�нн�й ��чты, а �ате� �т� �равить эт� ����щение. 4. Пере�е�тить файлы �а�р���в в �а��у «О�ра��танные». Правда же не�л�х�, ���да в�� ра��та вы��лн�ет�� �дни� щелч��� �ыши, и вы ух�дите � ра��ты �аждый день не в 17.10, а в 17 ча��в? Н� дел� не ��раничивает�� �дни�и т�ль�� ��ъе�тны�и �����нента�и, �ред�� �тавл�е�ы�и W��dows. Мн��ие ����ании, �р�и�в�д�щие �р��ра��н�е ��е��ече� W��dows. Мн��ие ����ании, �р�и�в�д�щие �р��ра��н�е ��е��ече� . Мн��ие ����ании, �р�и�в�д�щие �р��ра��н�е ��е��ече� ние, �р�дают д���лнительные �����ненты, �ред��тавл�ющие ра�н���ра�ные виды �ерви�а �ценари�� и W��dows��р��ра��а�, начина� ра��т�й в �ети и �а�анчива� ра��т�й � �рафиче��и�и ди��ле��и и д��ту��� � �а�а� данных. Кр��е т���, в �ценари�х ��жн� и���ль��вать �н�же�тв� �ри�ладных �р��ра��, та�их �а� M���oso�� Wo�d и �x���. П��р��ту ��в�р�, эти �р��ра��ы вы�тавл�ют ��ъе�ты, ��т�рые �ред�тавл�ют их д��у�енты, эле�тр�нные та�лицы и т. д . Е�ли вы ���да�ли�� ���давали Wo�d или �x��� �а�р��, �начит, вы уже в����ль��вали�ь эт�й в����жн��тью. Сценарии W��dows та�же ���ут ра��тать � эти�и ��ъе�та�и. На�ри�ер, �ценарий ��жет вы��лн�ть в�е ниже�еречи�ленные �адачи: y и���ль��вать Wo�d дл� ф�р�атир�вани� �тчета, в ��т�р�� �еречи�л�ют�� в�е и�еющие�� на ����ьютере файлы; y ���дать �x����диа�ра��у, ���а�ывающую, �а��й ��ъе� ди���в�й �а��ти �адей� �x����диа�ра��у, ���а�ывающую, �а��й ��ъе� ди���в�й �а��ти �адей� � диа�ра��у, ���а�ывающую, �а��й ��ъе� ди���в�й �а��ти �адей� �тв�вал �аждый и� ��ль��вателей �ети; y ���дать и ���луживать �а�у данных, в ��т�р�й �еречи�лены в�е ����ьютеры и их �етевые на�тр�й�и. И эт� в�е�� лишь не���ль�� �ри�ер�в. В ��нце ��нц�в, вы ��жете ���дать �в�и ����твенные д���лнительные ��ъе�ты, е�ли у�еете ���давать �р��ра��ы на C, C++, V�su�� ��s�� или на �а����ни�удь дру��� ��ы�е �р��ра��ир�вани�.
Что такое сценарий Windows? 31 Что в WSH означает слово «Host»? С��тавл�ющее «Hos�» ���вил��ь в WSH �ла��дар� т��у, чт� M���oso�� ра��ила �в�ю �и�те�у ���дани� �ценариев на две ча�ти: �дна и� них (s���p� host — х���ин �ценари�� �ани�ает�� у�равление� ��ъе�та�и, ���тавл�ющи�и �ценарий, а дру�а� (s���p� engine — движ�� �ценари�� интер�ретирует �а� и���ль�уе�ый ��ы� �цена� риев. Эт� ра�деление труда ���в�л�ет и���ль��вать дл� ���дани� �ценари� лю��й и� не���ль�их ��ы��в �р��ра��ир�вани�. Вы ��жете ��тан�вить �в�й вы��р на �дн�� и� не���ль�их ��ы��в, ру��в�д�тву��ь �в�и�и личны�и �ред��чтени��и. Ины�и �л�ва�и, �а� ���а�ан� на ри�. 1.1, WSH �лужит ���редни��� �ежду ��ы��вы� движ��� (�р��ра��ны� �����нент��, интер�ретирующи� вы�ран� ный дл� ваше�� �ценари� ��ы�� и �����нента�и или ��ъе�та�и, ��вершающи�и фа�тиче��ую ра��ту. Рис. 1 .1 . WSH работает посредником между движком языка сценария и объектами На�ри�ер, �ледующий уче�ный �ценарий, на�и�анный на ��ы�е V�S���p�, ��лучает и��, ��д ��т�ры� ��ль��ватель ����ьютера в�шел в �и�те�у, и выв�дит е�� на э�ран: set wnet = CreateObject("WScript.Network") uname = wnet.UserName MsgBox "Ваше имя пользователя — " & uname В эт�� �ри�ере V�S���p� и WSH не �ани�ают�� ��и���� и�ени, ��д ��т�ры� ��ль��ватель ����ьютера в�шел в �и�те�у. В�е�т� эт��� �ни и���ль�уют ��ъ� е�т WScript.Network, ��т�рый ��жет �ред��тавить инф�р�ацию �� и�еющей�� в �и�те�е W��dows �реде ра��ты � �ет��и — W��dows N��wo�k��g ��v��o�m���. Вы��лнение эт��� �ценари� �рафиче��и ���а�ан� на ри�. 1 .2 . Рис. 1 .2 . Сценарий может использовать объект WScript.Network для получения имени, под которым вошел в систему текущий пользователь
32 Глава 1. Windows Script Host Главн�е, на чт� �де�ь �ледует ��ратить вни�ание, �а�лючает�� в т��, чт� WSH дает ва� �р��т�й, эффе�тивный ������ и���ль��вани� не���ль�их ��тен �р�� �ра��ных ��дулей, �ред��тавл�е�ых W��dows и дру�и�и д���лнительны�и �ри� W��dows и дру�и�и д���лнительны�и �ри� и дру�и�и д���лнительны�и �ри� л�жени��и. М�жн� д��авл�ть не т�ль�� ��ъе�ты �����нент�в, �ред��тавл�е�ые W��dows, н� и интер�ретат�ры дру�их ��ы��в �р��ра��ир�вани�, �р��е тех двух, ��т�рые �ред��тавл�ют�� ����анией M���oso��. Эта в����жн��ть �удет ра����трена в дан� M���oso��. Эта в����жн��ть �удет ра����трена в дан� . Эта в����жн��ть �удет ра����трена в дан� н�й �лаве чуть ���же. Чем отличается создание сценариев от написания пакетных файлов? Те�, �т� ра��тал � �ер��нальны�и ����ьютера�и в не �т�ль давние вре�ена, ���да еще не �ыл� W��dows, д�лжн� �ыть, �на���а ра��та � �а�етны�и файла�и. Эти файлы та�же �вл�ют�� �ценари��и; �ни ���в�л�ют ���тавить �ценарий �а�у��а �ерии �р��ра��, �ред��тавл�� в����жн��ть ��и��а и ��ра��т�и файл�в, и �лужат в �аче�тве не���� ��д��и� �ри�итивн��� ��ы�а �р��ра��ир�вани�. Па�етные файлы ��ле�ны и �ейча�. Они ��др��н� ра���атривают�� в �лаве 11 «Па�етные файлы дл� ��ль�ы и ра�влечений». А в данн�й �лаве ра���атривают�� в��р��ы ���дани� �ценариев. Главны� ��раничение� �а�етных файл�в �вл�ет�� т�, чт� �ни ���ут лишь �а�у��ать �р��ра��ы и не �ред��тавл�ют ва� ������а в�аи��дей�тви� � ни�и. Па�етные файлы ра��тают на ур�вне в�ех �р��ра�� и файл�в цели���. Эт� ��жет �ри��дить�� дл� решени� лишь ��раниченн��� �ру�а �адач. Н�, в цел��, �а�етные файлы не ���в�л�ют и���ль��вать ��ъе�ты и ра��тать � те��т�� и чи�ла�и и �ри эт�� не дают ва� тех в����жн��тей, ��т�рые �ред��тавл�ют�� та�и�и ��щны�и ��ы�а�и �р��ра��ир�вани�, �а� V�S���p� или JS���p�. К�р�че ��в�р�, ���дание �ценариев — эт� ��лее ��вре�енный и ��щный ��дх�д � авт��ати�ации W��dows. Языки сценариев Са�и �ценарии �вл�ют�� те��т�вы�и файла�и, ��т�рые ��жн� реда�тир�вать � ����щью �р��т��� те��т�в��� реда�т�ра, та���� �а� Бл��н�т. В те��т�вых файлах нах�д�т�� ин�тру�ции, на�и�анные на ��ы�е �ценариев. М�жн� вы�рать �дин и� не���ль�их ��ы��в, ���ла�н� �в�и� личны� �ред��чтени��. В эт�� ра�деле �а� ра� и ра���атривают�� варианты эт��� вы��ра. W��dows 7, W��dows V�s��, W��dows XP и W��dows 2000 ���тавл�ют�� � дву�� интер�ретат�ра�и ��ы��в �ценариев: V�S���p� и JS���p�. С лю�ы� и� них вы ��же� V�S���p� и JS���p�. С лю�ы� и� них вы ��же� и JS���p�. С лю�ы� и� них вы ��же� JS���p�. С лю�ы� и� них вы ��же� . С лю�ы� и� них вы ��же� те делать в�е чт� у��дн�. Н� д��ту�ны и дру�ие ��ы�и �ценариев, ��т�рые ��жн� �в���дн� д��авить � WSH. Ниже �удет �риведен ��и��� наи��лее ра��р��транен� WSH. Ниже �удет �риведен ��и��� наи��лее ра��р��транен� . Ниже �удет �риведен ��и��� наи��лее ра��р��транен� ных и� д��ту�ных на �е��дн�шний день ��ы��в.
Языки сценариев 33 СРАВНЕНИЕ ЯЗЫКОВ СОЗДАНИЯ СЦЕНАРИЕВ С КОМПИЛИРУЕМЫМИ ЯЗЫКАМИ Пр��ра��у, вы��лн�ющую ту же �а�ую ра��ту, чт� и лю��й �ценарий, ��жн� на�и�ать на �тандартн�� ����илируе��� ��ы�е �р��ра��ир�вани�, на�ри�ер на C++. В че� же т��да ра�ница �ежду интер�ретируе�ы� ��ы���, та�и� �а� V�S���p�, и ����илируе�ы� ��ы���? Пр��ра��ы на интер�ретируе�ых ��ы�ах хран�т�� на ����ьютере в виде �р��т��� те��та, и их ��держи��е д�лжн� анали�ир�вать�� ���тр�чн� �ри �ажд�� их �а�у��е на ����ьютере. К���илируе�ые �р��ра��ы анали�ируют� �� т�ль�� �дин ра� и �ревращают�� в а��аратные «�ашинные ин�тру�ции», ��т�рые �р�це���р ��жет у�ваивать на�р��ую. В ре�ультате эт��� �����или� р�ванные �р��ра��ы ра��тают �ы�трее. Н� �р��ра��ы на интер�ретируе�ых ��ы�ах не нуждают�� в эта�е �ре��ра��вани�, и эт� э��н��ит не�н��� вре�ени в �р�це��е их на�и�ани� и д�в�д�и. Интер�ретируе�ые ��ы�и, � т��у же, �а� ча�тую �р�ще в и�учении и и���ль��вании и ���ут ��двер�ать�� и��енени�� �� �ере не��х�ди���ти. Дл� тех важных, н� �тн��ительн� не��льших �аданий �� ��ра��т�е данных, ��т�рые ра���атривают�� в данн�й �ни�е, �л�жн��ти и���ль��вани� ����или� руе�ых ��ы��в �еревешивают лю�ые �реи�уще�тва их ��лее �ы�тр�й ра��ты. VBScript С�четание V� в �л�ве V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� V� в �л�ве V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� в �л�ве V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� и �тн��ит�� � ��ы�у �р��ра�� �ир�вани�, ��т�рый ушел дале�� в�еред �т �в�е�� �ред�а, ра�ра��танн��� в Дар� т�ут���� ��лледже в 1964 ��ду. И �� �р�ше�твии �выше 45 лет ��s�� ����режне�у �вл�ет�� х�р�ши� ��ы��� «дл� начинающих», а в ру�ах ����ании M���oso�� �н �ревратил�� в эффе�тивный ��вре�енный ��ы�. V�S���p� �вл�ет�� �дн�й и� не���ль�их вер�ий ��ы�а V�su�� ��s��, ра�ра��� �вл�ет�� �дн�й и� не���ль�их вер�ий ��ы�а V�su�� ��s��, ра�ра��� V�su�� ��s��, ра�ра��� ��s��, ра�ра��� ��s��, ра�ра��� , ра�ра��� танных ����анией M���oso��. Он �вл�ет�� диале�т��, и���ль�уе�ы� в WSH, и �н та�же ��жет и���ль��вать�� в ве���рау�ерах и �ерверах. Я�ы� дл� �рил�же� ний — V�su�� ��s�� �o� App������o�s (V�A� и���ль�ует�� в �аче�тве ��ы�а ���дани� �ценариев или �а�р���в дл� та�их �р�ду�т�в ра��че�� �т�ла M���oso��, �а� Wo�d и �x���. П�лн�фун�ци�нальный �р�ду�т ра�ра��т�и, V�su�� ��s��, �р��ра��и�ты и���ль�уют дл� ���дани� авт�н��ных W��dows��р��ра��. Е�� ���ледни� в��л�� W��dows��р��ра��. Е�� ���ледни� в��л�� ��р��ра��. Е�� ���ледни� в��л�� щение� �вл�ет�� V�.N�T, ��т�рый ��жет �ри�ен�ть�� дл� ра�ра��т�и ��ычных и ве���рил�жений � и���ль��вание� ра�ра��танн�й M���oso�� техн�л��ии .N�T F��m�wo�k. V�S���p�, наверн�е, �а�ый �р��т�й в и�учении ��ы� ���дани� �ценариев, и ��� , наверн�е, �а�ый �р��т�й в и�учении ��ы� ���дани� �ценариев, и ��� ���ль�у �н та�же и���ль�ует�� дл� на�и�ани� �а�р���в (�ценариев� внутри M���oso�� Wo�d, �x��� и не��т�рых дру�их шир��� и���ль�уе�ых �рил�жений, т�, ���рее в�е��, эт� �а�ый лучший ��ы� дл� �ерв�начальн��� и�учени�. Лю��й ��ыт, ��т�рый ��жн� �ри��ре�ти �ри на�и�ании �а� �а�р���в, та� и �ценариев, ��жн� �ерене�ти � �дних вид�в �р�ду�т�в на дру�ие.
34 Глава 1. Windows Script Host JScript JS���p� �вл�ет�� ��ы��� �р��ра��ир�вани�, ��р�енны� �� ��ра�цу и ��д��ию ра�ра��танн��� ����анией N��s��p� ��ы�а J�v�S���p�. (К���ани� M���oso�� ���дала �в�й ����твенный вариант, ���твет�твующий в����жн��т�� е�� �режне�� �лавн��� ��н�урента, н� вне�ла в ��ы� не��т�рые и��енени�, чт��ы �делать е�� интере�� нее, и ��в�е�ти���ть �ри эт�� �ыла утрачена.� Я�ы� ра�ра�атывал�� �а� ������ в�траивани� в����жн��тей �р��ра��ир�вани� в ве���траницы. Ва�, наверн�е, �рих�дил��ь видеть ве���траницы, �де �еню или ри�ун�и и��ен�ют�� �ри �р�х�� де над ни�и у�а�ател� �ыши? С��рее в�е��, эт� в�е делал��ь � ����щью �ред�тв JS���p� или J�v�S���p�, �����ль�у эти ��ы�и ���дани� �ценариев ��ддерживают�� ��льшин�тв�� ве���рау�ер�в. ▼) JavaScript и JScript не имеют никакого отношения к языку Java. JavaScript имеет некоторые внешние сходства с Java, но не более того. Как уже упоминалось, JScript является разновидно- Java, но не более того. Как уже упоминалось, JScript является разновидно- , но не более того. Как уже упоминалось, JScript является разновидно- JScript является разновидно- является разновидно- стью JavaScript, поэтому он тоже не имеет никакого отношения к языку Java. JS���p� ��жет и���ль��вать�� �ри на�и�ании �ценариев дл� W��dows. Эт�т ��ы� ��жет ��д�йти те�, �т� уже �ривы� � е�� и���ль��ванию �ри �р��ра��ир�вании ве���траниц, у�равл�е�ых �ценари��и, и �ри на�и�ании �ценариев на �т�р�не �ервера. Ка� уже у���инал��ь, интер�ретат�ры V�S���p� и JS���p� �ред��тавл�ют�� в �аче�тве �����нента WSH, вх�д�ще�� в ���тав в�ех вер�ий W��dows, начина� � W��dows 2000. В�е дру�ие ��ы�и ���ут �ыть ��лучены �т �т�р�нних �р�и�в�ди� W��dows 2000. В�е дру�ие ��ы�и ���ут �ыть ��лучены �т �т�р�нних �р�и�в�ди� 2000. В�е дру�ие ��ы�и ���ут �ыть ��лучены �т �т�р�нних �р�и�в�ди� телей или и� на��ра �ред�тв W��dows R�sou��� ���s ����ании M���oso��. Не��т�рые и� этих ��ы��в �удут �еречи�лены в �ледующих ра�делах. Perl Я�ы� P��� �ыл ра�ра��тан в 19�7 ��ду ��ециали�та�и и� ����ще�тва U��x. С �а��� P��� �ыл ра�ра��тан в 19�7 ��ду ��ециали�та�и и� ����ще�тва U��x. С �а��� �ыл ра�ра��тан в 19�7 ��ду ��ециали�та�и и� ����ще�тва U��x. С �а��� U��x. С �а��� . С �а��� �� начала P��� �ыл «�т�рыты�» ��ы��� — е�� на�и�ание, �тлад�а и ���ледующа� ра�ра��т�а �ыли вы��лнены на не����ерче��их, ��ще�твенных �ринци�ах. Эт� ���ул�рный, ��щный ��ы�, ��т�рые ����енн� х�р�ш� ��дх�дит дл� ра��ты � те�� �т��. У не�� и�еют�� шир��ие в����жн��ти �� ��ра��т�е �тр�� и их �����тавле� ни� � ша�л�на�и, а та�же дру�ие �в�й�тва ��лн�ценн��� ��ы�а �р��ра��ир�вани�. P��� — д�в�льн� �а�утанный и трудный ��ы�. Пр��ра��ы на P��� ���ут �ыть �л�жны дл� чтени� и ��ни�ани� даже дл� ��ытных �р��ра��и�т�в (��эт��у е�� в шут�у на�ывают ��ы��� т�ль�� дл� �а�и�и�. И те� не �енее ����ще�тв� L��ux �рин�л� P��� и �р�д�лжил� е�� ра�витие, и те�ерь в Интернете ��жн� найти ��ль� P��� и �р�д�лжил� е�� ра�витие, и те�ерь в Интернете ��жн� найти ��ль� и �р�д�лжил� е�� ра�витие, и те�ерь в Интернете ��жн� найти ��ль� шие хранилища �е��латных �ценариев на ��ы�е P���. В��лне в����жн�, чт� в них уже е�ть �ценарий, вы��лн�ющий нужную ва� �адачу. К���ани� A���v�S���� Co�po����o�, ��т�ра� ��ъ�вл�ет �е�� «ведущи� ���тав� щи��� �р��ра��ных �р�ду�т�в и �луж� дл� �р�����латф�р�енн�й ра�ра��т�и на ��н�ве �т�рыт��� ��да», вы�у�тила �а�ет P��� в виде ��ы�а «�рие�ле���� дл� W��dows S���p� Hos�», и эт�т �а�ет ��жн� �в���дн� �а�ру�ить � ве���айта www.
Языки сценариев 35 activatestate.com. Пр�ду�т ����ании A���v�S���� �вл�ет�� ��лн�фун�ци�нальн�й инте�рир�ванн�й � W��dows вер�ией ��ы�а P��� и �ред�тавл�ет не���ненный интере� дл� в�ех лю�ителей эт��� ��ы�а. Python Py�ho� — ���ул�рный ��ы� дл� ���дани� �ценариев и �р��ра��ир�вани�. Он �ыл ра�ра��тан в наци�нальн�� научн��и��лед�ватель���� ин�титуте �ате�ати�и и инф�р�ати�и (CWI� в А��терда�е. Эт� �ерен��и�ый, ��ъе�тн���риентир�ван� ный ��ы�, ��ра�д� �енее �а�утанный, че� P���, ��лучивший шир��ую �ра�ти�у �ри�енени� в ����ще�тве L��ux. Бе��латный WSH��ла�ин д��ту�ен на ве���айте www.activestate.com. Open Object REXX R�XX �ыл ���дан в 1979 ��ду в �аче�тве ��ы�а �ценариев дл� универ�альных �ашин I�M. С тех вре�ен ����ани� I�M вы�у�тила вер�ии, д��ту�ные на I�M L��ux, AIX, OS�2 и W��dows, а та�же на ��ераци�нных �и�те�ах �а��й ����ании, ра�ра��танных дл� универ�альных �ашин. Op�� Obj��� R�XX �вл�ет�� �а�ы� ���ледни� W��dows���в�е�ти�ы� в��л�щение� эт��� �р�ду�та. И�начальн� �н �ыл ф�р�альны� �р�ду�т�� ����ании I�M, н� �на вы�у�тила е�� �а� �ред�тв� � �т�рыты� ��д��. П�др��н��ти ��жн� найти на ве���айте www.oorexx.org. Ruby Ruby �вл�ет�� �тн��ительн� н�вы� ��ы���, ���данны� в Я��нии. В на�т��щее вре�� �н ��лее ра��р��транен в Евр��е и Я��нии, че� в США, н� в�е же и та� на�ирает �в�ю ���ул�рн��ть. Вер�и� Ruby, �ерене�енна� в �реду WSH, д��ту�на на ве���айте http://arton.hp.infoseek.co.jp. М�жн� та�же ��и��ать инф�р�ацию в Ин� тернете �� �лючев��у �л�ву «A���v�S���p�Ruby». ▼) Если существует более привычный для вас язык сценариев, который не был упомянут, про- верьте, доступна ли где-нибудь его версия, которая может использоваться в среде WSH. Если таковая отыщется, то, пожалуйста, сообщите мне об этом. Просто зайдите на веб-сайт www. helpwin7.com/scripting и оставьте для меня сообщение. Выбор языка О�н�вн�е вни�ание в эт�й �ни�е уделен� ��ы�у V�S���p�, �����ль�у �н �вл�ет�� наи��лее ра��р��траненны� и «не�л�жны�» ��ы��� �ценариев. Е�ли вы ��ль�уете�ь �ра�у не���ль�и�и �р�ду�та�и ����ании M���oso��, V�� M���oso��, V�� , V�� V�� S���p� — �а�ый важный ��ы� дл� и�учени�, ��т��у чт� �н и���ль�ует�� в �аче�тве в�тр�енн��� ��ы�а �а�р���ределений внутри та�их M���oso�� �р�ду�т�в, �а� Wo�d, �x���, A���ss и �н��их дру�их. Лю�ители U��x и L��ux ���ут в��лне ��раведлив�
36 Глава 1. Windows Script Host в��хвал�ть P��� и Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� P��� и Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� и Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� , н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� тать � �рил�жени��и M���oso��, � ре���ендую V�S���p�. И�енн� ��эт��у в �ледующей �лаве ра���атривает�� V�S���p� и �ред��тав� V�S���p� и �ред��тав� и �ред��тав� л�ет�� �рат��е уче�н�е �����ие �� эт��у ��ы�у. К ��жалению, ��учение дру�и� ��ы�а� �ан�л� �ы на�н��� ��льше �траниц, че� ��держит эта �ни�а. Е�ли ва� и�� ве�тен и интере�ен лю��й дру��й ��ы� �ценариев, �, ��нечн� же, ��ддерживаю ваше �тре�ление и���ль��вать и�енн� эт�т ��ы�. В �лаве 3 �удет ���а�ан�, �а� ��лучить д��ту� � ��ъе�та� W��dows и� �р��ра�� на не���ль�их альтернативных ��ы�ах. П��ле и�учени� эт��� �атериала вы ���жете �ереве�ти �ри�еры, �рив�ди�ые в� в�ех дру�их �е�тах эт�й �ни�и, на вы�ранный ва�и ��ы�. ▼) В примерах сценариев, показанных в главах 4–9, используется исключительно язык VBScript. Я рассматривал возможность обучения обоим языкам, и VBScript, и Jscript, и предоставления примеров сценариев сразу на нескольких языках. Но решил не делать этого. Выбрав один только VBScript, я могу предложить намного большее разнообразие сценариев, чем смог бы, если бы пришлось повторять каждый сценарий на нескольких языках. Я также полагаю, что VBScript в качестве самого первого языка сценариев является наилучшим выбором, поскольку его можно применить во многих других приложениях Microsoft. Я понимаю, что тем самым немного затрудняю задачу тем читателям, которые уже знакомы с другим языком сценариев. Если у вас уже есть достаточный опыт, чтобы отдать предпочтение другому языку, я все же думаю, что большее разнообразие и глубина примеров, приводимых в этой книге на VBScript, сделает работу по их переводу на другой язык вполне стоящей по- VBScript, сделает работу по их переводу на другой язык вполне стоящей по- , сделает работу по их переводу на другой язык вполне стоящей по- траченного на нее времени. Простой сценарий Ита�, хватит х�дить в��ру� да ���л�! П�ра ���а�ать �ра�тиче��ий �ри�ер т���, � че� идет речь. Ра����три� �ценарий, �р�вер�ющий в�е файлы в �аданн�� �ата� л��е (в �а��е� и выв�д�щий ��щий ра��ер в�ех файл�в в �айтах. 1 ' s cript0101.vbs 2 ' Общее пространство, занимаемое файлами указанного каталога 3 dir = "C:\" 4 5 set Fsys = CreateObject("Scripting.FileSystemObject") 6 totsize = 0 7 for each file in Fsys.GetFolder(dir).Files 8 totsize = totsize + file.size 9 next 10 wscript.echo "Общий размер файлов в ", dir, " составляет ", totsize, " байт" В данн�� �ри�ере �ценарий на�тр�ен на ��д�чет длины в�ех файл�в в ��рне� в�� �атал��е же�т���� ди��а (C:\�. В�е, чт� �де�ь ���а�ан�, �вл�ет�� ��держи�ы� файла, ��т�рый � на�вал script0101.vbs. Следует �а�етить, чт� ���а�анна� выше ра��ечат�а ��держит н��ер в начале �ажд�й и� 10 �тр�� те��та, чт��ы � ни� ��жн� �ыл� ��ращать�� �ри дальнейше� ра���ре �ценари�. В �а��� файле �ценари� этих н��ер�в нет, ��эт��у �ри �а��� �т��тельн�� на��ре �ценари� их �ледует и��лючить.
Простой сценарий 37 ▼) Не следует набирать все вручную. Все именованные и пронумерованные примеры сценариев, показанные в этой книге, можно загрузить с веб-сайта www.helpwin7.com/scripting. Просле- дуйте по этой ссылке, чтобы загрузить ZIP-файл с учебными сценариями. Страница загрузки содержит инструкции и советы по установке и запуску примеров сценариев. Те�ерь, ���ле дв�йн��� щелч�а на �нач�е эт��� файла в W��dows �xp�o��� ваше�� ����ьютера, ���вит�� диал���в�е ��н�, ���а�анн�е на ри�. 1 .3 . (Е�ли вы �а�ру�или файл уче�ных �ценариев, ��жете и��ытать эти �ценарии в ра��те на �в�е� ����ьютере.� Рис. 1 .3. Результат, выведенный после двойного щелчка на значке файла учебного сценария ▼) Двойной щелчок на значке файла на вашем компьютере может не работать. В целях безопас- ности некоторые пользователи или компании настраивают свои компьютеры, работающие под управлением операционной системы Windows, так, чтобы VBS-сценарии не запускались по од- Windows, так, чтобы VBS-сценарии не запускались по од- так, чтобы VBS-сценарии не запускались по од- VBS-сценарии не запускались по од- -сценарии не запускались по од- ному двойному щелчку. Если это именно ваш случай, не переживайте, просто читайте книгу дальше. Чт��ы ��н�ть, �а� и�енн� ���вил��ь эт� диал���в�е ��н�, давайте ра����три� ���тр�чн� ��держи��е файла �ценари�. Е�ли вы не �на���ы � V� или в���ще не �наете, чт� та��е �р��ра��ир�вание, ���а не �т�ит в�лн�вать��. П�др��н� � �р�� �ра��ир�вании �удет ра���а�ан� в �лаве 2 «Ру��в�д�тв� �� V�S���p�». Стр��и 1 и 2 �вл�ют�� ����ентари��и. В�е, чт� в V�S���p� нах�дит�� ���ле �и�в�ла �динарн�й �авыч�и ('� — и�н�рирует��. К���ентарии не и�еют дл� W��dows ни�а���� �начени�. Их �адача — ����чь ва� и дру�и� люд�� ��н�ть, чт� делает �ценарий. Д��авление � ваши� �ценари�� ����ентариев, ��и�ывающих чт� и �а� �ни делают, �читает�� �равил�� х�р�ше�� т�на. В ��лее длинных �цена� ри�х ��жн� давать д�в�льн� ��др��ные ��и�ани�. В данн�� �ценарии д��тат�чн� �рат�� у�а�ать, че� �н �ани�ает��. О�ратите вни�ание на т�, чт� эт�т �ценарий начинает�� � ����ентари�, у�а�ывающе�� �а�� и�� файла �ценари�. Я �делал эт�, чт��ы вы ����ли �ты��ать эт�т �ценарий �реди на��ра �ри�ер�в, ��т�рый вы ��жете �а�ру�ить. В �тр��е 3 у�танавливает�� и�� �а��и, чье ��держи��е нужн� ��д�читать. Стр��а 4 ��тавлена �у�т�й. И���ль��вание �у�тых �тр�� дл� ви�уальн��� ра�де� лени� ча�тей �р��ра��ы или �ценари� �читает�� х�р�ши� �тиле�. Х�т� дл� �реды WSH эта �у�та� �тр��а ни�а��й р�ли не и�рает, ва� и ���у�ни�удь дру���у �удет ле�че читать �р��ра��у и ра��ирать�� в ней, ���да �тдельные ша�и в ней ра��иты � ����щью �у�тых �р��тран�тв (�у�тых �тр���.
38 Глава 1. Windows Script Host Стр��а 5 ���в�л�ет и���ль��вать �����нент �р��ра��ир�вани� (��ъе�т� ��д на�вание� Scripting.FileSystemObject, ��т�рый дает в����жн��ть �ценарию и�� �лед�вать ��держи��е ди���в и �а��� и ��лучить инф�р�ацию � ра���л�женных та� файлах. Са� ��ы� V�S���p� та��й в�тр�енн�й в����жн��ти не и�еет, н� эт� ��д �илу ��ъе�ту FileSystemObject, и �ы ��же� в����ль��вать�� и� в нашей �р�� �ра��е. В �тр��е 6 у�танавливает�� �четчи� (�ере�енна�, �а� и�ве�тн� �р��ра��и�та��, и���ль�уе�ый дл� ���ра ��ще�� ра��ера в�ех файл�в. Е�� �начение начинает�� � нул�, а �ате� � не�у д��авл�ют�� ра��еры �ажд��� файла. Стр��и 7 и 9 ф�р�ируют ци�л, ��т�рый вы��лн�ет лю�ые �тр��и �р��ра��ы, нах�д�щие�� внутри ци�ла (�� �дн��у ра�у дл� �ажд��� файла в вы�ранн�� �а� тал��е�. О�ратите вни�ание на т�, чт� те��т внутри ци�ла и�еет �т�ту�. Я�ы�у V�S���p� в�е равн�, е�ть та�ие �т�ту�ы в виде �у�т��� �р��тран�тва или их нет — эт� в�е�� лишь ������ у�р��тить выделение начала и ��нца ци�ла, чт��ы �р�ще �ыл� ��н�ть ра��ту �р��ра��ы. В �тр��е � нах�дит�� ��ерат�р, вы��лн�ющий реальную ра��ту: �н д��авл�ет ра��ер �ажд��� файла в W��dows��атал��е � �начению �ере�енн�й �� и�ени tot- size. К��да ци�л �делает эт� дл� �ажд��� файла, у на� �удет ��щий ра��ер в�ех файл�в, нах�д�щих�� в �атал��е. В V�S���p� �на� равен�тва (=� та��й же, чт� и���ль��вал�� �де�ь, не ��начает «эти два �начени� идентичны», �а� эт� �ывает в ал�е�ре. Данна� �тр��а �р��ра��ы �ред�и�ывает V�S���p� в��ть чи�л� в �ере�енн�й totsize, д��авить � не�у �на� чение file.size, �вл�ющее�� ра��ер�� те�уще�� файла, и ���е�тить ре�ультат в �ере�енную totsize. (Е�ли на ����ьютерн�й �лавиатуре �ыл� �ы ��льше д�� �ту�ных �и�в�л�в, в����жн�, V�S���p� �ыл �ы ���н�труир�ван та�, чт��ы �а�и�ь вела�ь �ледующи� ��ра���: totsize <= totsize + file.size.� О�ерат�р в �тр��е 10 выв�дит ре�ультаты � и���ль��вание� �р��т��� чел�ве� че����� ��ы�а. П� у��лчанию ���анда echo выв�дит те��т в ���вл�юще��� ��не. Эт� �чень �р��т�й �ценарий. П�ль�ы �т не�� не�н���, н� �н в�е же иллю�три� рует не��т�рые важные а��е�ты ���дани� �ценариев дл� W��dows: y Я�ы�и �ценариев ��ладают ��вре�енны�и �ред�тва�и �р��ра��ир�вани�, ��т�� рых нет у ��ы�а на�и�ани� �а�етных файл�в, та�и�и �а� �ере�енные и ци�лы. (Эт� не ��в�е� ��раведлив�, �����ль�у у �а�етных файл�в е�ть нед�ра�витые �ере�енные и ци�лы, н� �де�ь �лючевы� �вл�ет�� �л�в� «нед�ра�витые».� y Сценарии ���ут и���ль��вать дл� ра�ширени� ��ы�а ��ъе�ты, чт� �ридает и� д���лнительные в����жн��ти. y Сценарии ���ут в�аи��дей�тв�вать � ��ераци�нн�й �и�те��й (на�ри�ер, дл� и��лед�вани� инф�р�ации � файлах в �а��е� и ���ут в�аи��дей�тв�вать � людь�и (на�ри�ер, �уте� выв�да ре�ультат�в в виде �тф�р�атир�ванн��� те��та�. y Сценарии ��жн� �делать ��н�тнее �а �чет и���ль��вани� �у�тых �р��тран�тв, ��ле�чающих ��ни�ание �тру�туры �р��ра��ы.
Типы файлов сценариев 39 y Файлы �ценариев ���ут и д�лжны ��держать ����ентарии, ��и�ывающие и д�� �у�ентирующие в�е, чт� делает �ценарий и �а� �н ра��тает. К���ентарии ����� �ают �делать файлы �ценариев важн�й ф�р��й д��у�ентации, �а �чет выраже� ни� в �и�ь�енн�й ф�р�е ��н�ретн��� ��р�д�а вы��лнени� т�й или ин�й �адачи. Типы файлов сценариев Файлы �ценариев — эт� �р��тые, �а�ые ��ы�н�венные те��т�вые файлы, ��т�рые ��жн� реда�тир�вать в Бл��н�те. Внутри этих файл�в нах�д�т�� ��ерат�ры �р�� �ра��ы, �а�и�анные � и���ль��вание� �инта��и�а, ��т�рый ��н�тен и���ль�уе� ���у ��ы�у �ценариев. Чт��ы ��ераци�нна� �и�те�а W��dows �нала, �а��й ��ы� и���ль�ует ваш �ценарий, ��жн� в����ль��вать�� �дн���ра�н�й �хе��й и�ен�вани� файл�в �ри �ри�ваивании и�ен �в�и� файла� �ценариев. Са�а� важна� ча�ть — эт� расши рение или тип файла. На�ри�ер, в и�ени файла myscript.vbs ра�ширение� �вл�ет�� .vbs. Эт� ра�ширение нужн� и���ль��вать, е�ли �ценарий �ишет�� на V�S���p�. П� у��лчанию W��dows �xp�o��� не ���а�ывает ра�ширение �ри выв�де ��и��а и�ен файл�в — �н ��жет �р��т� у�а�ать в ��и��е, чт� myscript �вл�ет�� файл�� �ценари� V�S���p�. ▼▼ Я считаю, что скрытие расширений в Windows Explorer является не самой лучшей идеей. Чтобы сделать расширения видимыми, откройте в Explorer любое окно (например, Мой компьютер (My Computer) или Мои документы (My Documents)). В Windows 7 и Vista нажмите на клавишу A LT и отпустите ее, чтобы появилось меню. Щелкните на пункте меню Сервис (Tools), Параметры папок (Folder Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- Folder Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- ). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- View). В списке Дополнительные параметры (Ad- ). В списке Дополнительные параметры (Ad- Ad- vanced Settings) найдите флажок Скрывать расширения для зарегистрированных типов файлов (Hide Extensions For Known File Types) и снимите его. После этого нажмите OK. В х�де ра��ты �� �ценари��и ва� ���ут в�третить�� файлы � ра�личны�и ра�� ширени��и. Наи��лее ра��р��траненные и� них ���а�аны в та�л. 1 .1 . Таблица 1.1. Расширения файлов сценариев Расширение Тип файла .js Сценарий JS���p� .js� За��дир�ванный �ценарий Js���p� .p�s Сценарий P��� .vb� За��дир�ванный �ценарий V�S���p� .vbs Сценарий V�S���p� .ws� К����нент �ценари� W��dows .ws� Файл �ценари� W��dows (в ф�р�ате XML� .wsh Файл на�тр�е� WSH
40 Глава 1. Windows Script Host ▼) Если вы пользовались ранней версией WSH и создали файлы с расширением .ws, для WSH версии 5 и выше их нужно переименовать в файлы с расширением .wsf. При использовании PerlScript будьте внимательны, если ранее у вас была установлена программа Real Player от компании RealAudio. Она стремится перехватить у PerlScript файловое расширение .pls. Если такое случится, сначала нужно в Real Player отключить тип носителя Audio Playlist. Затем в Win- Real Player отключить тип носителя Audio Playlist. Затем в Win- Player отключить тип носителя Audio Playlist. Затем в Win- Player отключить тип носителя Audio Playlist. Затем в Win- отключить тип носителя Audio Playlist. Затем в Win- Audio Playlist. Затем в Win- Playlist. Затем в Win- Playlist. Затем в Win- . Затем в Win- Win- dows 7 и Vista открыть Панель управления (Control Panel), щелкнуть на значке Программы по умолчанию (Programs), затем на Сопоставление типов файлов или протоколов конкретным программам (Make a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Make a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Always Open in a Speci�c Program) и проверить, с чем связаны фай- Always Open in a Speci�c Program) и проверить, с чем связаны фай- Open in a Speci�c Program) и проверить, с чем связаны фай- Open in a Speci�c Program) и проверить, с чем связаны фай- in a Speci�c Program) и проверить, с чем связаны фай- in a Speci�c Program) и проверить, с чем связаны фай- a Speci�c Program) и проверить, с чем связаны фай- a Speci�c Program) и проверить, с чем связаны фай- Speci�c Program) и проверить, с чем связаны фай- Speci�c Program) и проверить, с чем связаны фай- Program) и проверить, с чем связаны фай- Program) и проверить, с чем связаны фай- ) и проверить, с чем связаны фай- лы с расширением .pls в этом окне. Если они не связаны с Microsoft Console Based Script Host, щелкните на кнопке Изменить программу (Change Program) и найдите с помощью обзора файл \windows\system32\cscript.exe. В Windows XP откройте Windows Explorer, щелкните на пункте Настройка (Tools), Свойства папки (Folder Options), Типы файлов (File Types). Найдите в списке PLS File и проверьте его связи в этом месте. Дру�ие ��ы�и �ценариев та�же и���ль�уют ��ецифиче��ие ра�ширени�; �а��е и�енн� ���лашение �� и�ена� и���ль�ует��, ��и�ан� в д��у�ентации �� �ажд��у ��н�ретн��у ��ы�у. Не��т�рые и� ти��в файл�в, �еречи�ленных в та�л. 1 .1, ���ут �ыть ва� не�на� 1.1, ���ут �ыть ва� не�на� 1.1, ���ут �ыть ва� не�на� ���ы, ��эт��у ��лее ��др��н� �ни ра���атривают�� в �ледующих ��дра�делах. Е�ли вы т�ль�� �ри�ту�аете � и�учению в��р���в ���дани� �ценариев, ва� не ��� над���т�� �ра�у в�е эти ��др��н��ти, ��эт��у данную инф�р�ацию ��жн� �р��т� �р����треть или �р��у�тить д� ��ры д� вре�ени. JSE и VBE: Закодированные сценарии Не��т�рые �ценарии ���дают�� ра�ра��тчи�а�и ����ерче��их �р��ра�� и ли� цен�ируют�� �а �лату. Эти ра�ра��тчи�и �аинтере��ваны в �ащите �атраченных и�и у�илий �т �лучайн��� ���ир�вани� и �ират����� ра��р��транени�. Еще �дна �ате��ри� �ценариев �ишет�� �и�те�ны�и ад�ини�трат�ра�и, ��т�рые х�тели �ы ��рыть ��др��н��ти ��р��ративных ��ераций �т чьих�ни�удь лю���ытных �ла� и ��р�вых ру�. Чт��ы ����чь эти� авт�ра�, не��т�рые ��ы�и �ценариев �ред��тав� л�ют �ред�тва ��дир�вани�, �жи�ающие и ��дирующие файлы �ценариев, чт��ы их нель�� �ыл� ��льше та� �р��т� �р�читать. К���ани� M���oso�� �ред��тавл�ет �а�ружае��е �ред�тв� ��дир�вани� файл�в V�S���p� и JS���p�. Он� ��нвертирует V�S���p��файлы � ра�ширение� .vb в �а��� дир�ванные файлы � ра�ширение� .vbe, а Js���p��файлы � ра�ширение� .js в �а��� дир�ванные файлы � ра�ширение� .jse. Утилиту, вы��лн�ющую эту �адачу, ��жн� �а�ру�ить � ве���айта www.microsoft.com. На�ерите в ��ле ��и��а «S���p� ���od��» и щел�ните на ���вившей�� в ре�ультате ��и��а ��ыл�е Download Details. ▼o Средство Script Encoder затрудняет, но не исключает полностью возможность для посторонних лиц читать содержимое сценария. Настойчивый взломщик все же в состоянии декодировать файл. Не помещайте в сценарий пароли и другую конфиденциальную информацию, даже если этот сценарий закодирован.
Типы файлов сценариев 41 Windows Script Files (WSF) Чт��ы ��ле�чить ���дание и ��ддерж�у �л�жных на��р�в �ценариев, ����ани� M���oso�� ра�ра��тала ф�р�ат файла, ���в�л�ющий не���ль�и� �тдельны� �цена� ри�� хранить�� в �дн�� те��т�в�� файле и даже и���ль��вать в �дн�� �ценарии �ра�у не���ль�� ��ы��в. Н�вый ф�р�ат файла на�ывает�� W��dows S���p� F��� (WSF�, и дл� не�� и���ль�ует�� ра�ширение .wsf. Пр�ще �удет ���а�ать, че� ��ъ��нить, ��эт��у �начала � е�� ���ажу: <package> <job id="script1"> <script language="VBScript"> WScript.Echo "Это сценарий номер 1!" </script> </job> <job id="script2"> <script language="JScript"> WScript.Echo("Это сценарий номер 2!"); </script> </job> <job id="script3"> <script language="VBScript" src ="c:\scriptlib\anotherfile.vbs" /> </job> </package> Файлы WSF — эт� �р��тые те��т�вые файлы, �тру�турир�ванные � ����щью те��т�в�й ра��ет�и, ��т�ра� на�ывает�� те�а�и. Е�ли ва� �рих�дил��ь �ани�ать�� ве��ди�айн��, чт��т� ��х�жее вы уже видели, �����ль�у �ни �ильн� на���инают эле�енты ��ы�а �и�ерте��т�в�й ра��ет�и — Hyp����x� M��kup L��gu�g� (HTML�, ��т�рый и���ль�ует�� �ри ���дании ве���траниц. Н� т�, � че� �ы и�ее� дел� в данн�� �лучае, на�ывает�� ра�ширенны� ��ы��� ра��ет�и — �x���s�b�� M��kup L��gu�g� (XML�, и �де�ь нужн� �ридерживать�� �чень �тр���й �тру�туры. XML и���ль�ует�� дл� ����начени� начала и ��нца �у���в �ценари�. Са� �� �е�е XML ��ы��� �ценариев не �вл�ет��. В данн�� �ри�ере ��жн� увидеть три �тдельных фра��ента �ценари�, ра�де� ленные те�а�и <package>, <job> и <script>. Каждый �тдельный �ценарий, ��т�рый �ри дру�их ���т��тель�твах нах�дил�� �ы в �тдельн�� файле � ра�ширение� .vbs или � ра�ширение� .js, ���ещен �ежду те�а�и <job> и </job>. Атри�ут ID дает �ажд��у �ценарию и��. В����жн�, в�е эт� вы�л�дит не���ль�� �а�утанн�, н� цель ���т�ит в т��, чт��ы дать ва� в����жн��ть ���е�тить �ра�у не���ль�� �ценариев в �дин файл, чт��ы дл� �в�евре�енн��� ��� н�влени� нужн� �ыл� ���ир�вать лишь �дин файл. Дл� �а�у��а нужн��� �ценари� е�� ��жн� вы�рать �� и�ени е�� �адани� ( job� — эт�т �р�це�� �удет ра����трен чуть ���же в ра�деле «Ws���p� и Cs���p�». Файлы WSF интере�ны те�, чт� вы ��жете в �дн�� и т�� же файле ��ъедин�ть �����ненты �ценари�, на�и�анные на ра�ных ��ы�ах, и делать эт� даже в �дн�� и т�� же �адании ( job�, �а�лючив ча�ть �р��ра��ы в те�и <script> и </script>. Эти те�и у�а�ывают, на �а��� ��ы�е на�и�ана ча�ть �р��ра��ы. О�ратите вни�ание
42 Глава 1. Windows Script Host на т�, чт� в �ри�ере �ерв�е �адание на�и�ан� на V�S���p�, а вт�р�е на�и�ан� на JS���p�. М�жн� та�же и���ль��вать и дру�ие ��ы�и, е�ли �ни у ва� у�тан�влены. Третье �адание ���а�ывает еще �дн� ��ецифиче���е �в�й�тв� WSF�файл�в: в����жн��ть �ривлечь ча�ти �ценариев и� дру�их файл�в. В данн�� �ри�ере и� файла c:\scriptlib\another�le.vbs �ривле�ает�� �р��ра��а script3. О�ратите вни�а� ние, чт� те� <script> �авершает�� �и�в�ла�и />, в�е�т� ��ычн��� �и�в�ла >. Эт� ��ециальный инди�ат�р, ��т�рый нужен ��ы�у XML и �видетель�твует �� �т�ут� �твии ���твет�твующе�� эт��у те�у �а�рывающе�� те�а </script>. Те� <script> и�еет две ф�р�ы. Он ��жет в�лючать в �е�� ча�ть те��та �р��ра��ы, �а� в данн�� �ри�ере: <script language="VBscript"> Сюда помещается программа на VBScript Она может иметь весьма большой размер </script> А та�же �н ��жет ���а�ать, чт� �р��ра��а �ценари� д�лжна �ыть �ривлечена и� �а�����ни�удь дру���� �е�та: <script language="Vbscript" src="path or URL" /> В� вт�р�й ф�р�е те�а <script> эле�ент src ����щает WSH, �де и��ать �атериал дл� �читывани�. Эт� �е�т� ��жет �ыть �ред�тавлен� в ф�р�е ��лн��� �утев��� и�ени файла или даже в виде URL, т��да �атериал и�вле�ает�� и� у�а�анн��� �е� �та в Интернете. Эт� �в�й�тв� дает в����жн��ть ��хранить ча�т� и���ль�уе�ую ча�ть �р��ра�� �ценариев в �а����ни�удь �е�те, и� ��т�р��� �на ��жет �ыть и�� ��ль��вана �н��и�и �ценари��и. В �лаве 2 �удет ра����трен� �р��ра��ир�вание на ��ы�е V�S���p�, в ��т�р�� и���ль�уют�� ��д�р��ра��ы и фун�ции, и у �ен� еще �удет чт� ��а�ать на эту те�у. И на��нец, ве�ь файл ���ещает�� внутри те��в <package>. Е�ли в файле ��� держит�� ��лее �дн��� �тдельн��� �адани�, �н, �а� ���а�ан� в �ри�ере, д�лжен начинать�� те��� <package> и �а�анчивать�� те��� </package>. Е�ли в файле т�ль�� �дн� �адание, те�и <package> и </package> ���ут �ыть ��ущены. ▼) О формате WSF-файла можно рассказать кое-что еще. Более подробно он рассматривается в приложении G «Creating �our Own Scriptable Objects» («Создание своих собственных объ- G «Creating �our Own Scriptable Objects» («Создание своих собственных объ- «Creating �our Own Scriptable Objects» («Создание своих собственных объ- Creating �our Own Scriptable Objects» («Создание своих собственных объ- �our Own Scriptable Objects» («Создание своих собственных объ- �our Own Scriptable Objects» («Создание своих собственных объ- Own Scriptable Objects» («Создание своих собственных объ- Own Scriptable Objects» («Создание своих собственных объ- Scriptable Objects» («Создание своих собственных объ- Scriptable Objects» («Создание своих собственных объ- Objects» («Создание своих собственных объ- Objects» («Создание своих собственных объ- » («Создание своих собственных объ- ектов, используемых в сценариях»), которое можно загрузить с веб-сайта www.helpwin7. com/ scripting. Компоненты Windows Script (WSC) Файл �����нент�в W��dows S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� W��dows S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� WSC� �вл�ет�� еще �дни� ти��� файл�в �це� � �вл�ет�� еще �дни� ти��� файл�в �це� нариев � д��авленн�й � не�у ра��ет��й, ��т�ра� ���дает XML��тру�туру. Файлы �����нент�в ���в�л�ют ра�ра�атывать �в�и ����твенные �р��ра��ные «��ъе�ты» дл� их ���ледующе�� и���ль��вани� в �ценари�х и в дру�их �р��ра��ах. К����� ненты W��dows S���p� (WSC� ра���атривают�� в �рил�жении G.
Создание своего первого файла сценария 43 Настройки WSH Е�ли щел�нуть �рав�й �н����й �ыши на �нач�е файла �ценари�, а �ате� вы�рать �ун�т �еню Свойства (P�op�����s�, W��dows, �а� ���а�ан� на ри�. 1.4, выведет в ��не �в�й�тв ��ециальную в�лад�у Сценарий (S���p��, �вл�ющую�� уни�альн�й дл� данн��� �ценари�. Рис. 1 .4. Окно свойств для файла сценария содержит вкладку Сценарий Зде�ь ��жн� у�а�ать, �а� д�л�� �ценарию ра�решен� ра��тать, ���а �и�те�а не ���читает е�� «у�ерши�». Вы ��жете �р�и�н�рир�вать на���инание �� авт�р� ��их �равах M���oso��, ��т�р�е ��ычн� выв�дит��, ���да �ценарий вы��лн�ет�� в режи�е ���андн�й �тр��и. Е�ли и��енить на�тр�й�и �� у��лчанию в эт�� ��не �в�й�тв, W��dows ��хран�ет инф�р�ацию в файле � та�и� же и�ене�, чт� и и�� файла �ценари�, н� � ра�ширение� .wsh. Файлы WSH не и�еют ни�а���� дру���� ��держи���� или �редна�начени�, �р��е хранени� этих на�тр�е�. Эти же варианты на�тр�е� ���ут �ыть у�тан�влены �ри �а�у��е �ценари� в ���андн�й �тр��е, н� �де�ь � �а�е�аю не�н��� в�еред. Давайте верне��� на�ад � ��н�ва� и �����три�, �а� ���дать н�вый файл �ценари� � �а���� начала. Создание своего первого файла сценария Ка� уже у���инал��ь в данн�й �лаве, файлы �ценариев ��жн� ���давать в лю��й �р��ра��е реда�тир�вани�, ��т�ра� ��жет ра��тать � �р��ты�и те��т�вы�и фай� ла�и. Эт� ��жн� �делать в� в������ательн�й �р��ра��е Бл��н�т, ���тавл�е��й в�е�те � W��dows, ��эт��у давайте в����ль�уе��� эт�й �р��ра���й дл� на��ра файла �ценари� на ваше� ����ьютере. В эт�� ра�деле � �р�веду ва� �� в�е� не��� х�ди�ы� дл� эт��� ша�а�. (П��же �удет �редл�жена ��лее ��дх�д�ща� �р��ра��а дл� ���дани� �ценариев, н� дл� эт��� �ри�ера в��лне ��д�йдет и Бл��н�т.� Создание и защита папки сценариев Дл� начала давайте ���дади� �а��у и��лючительн� дл� хранени� �ценариев. Е�ли �ценарии хран�т�� в �дн�� �е�те, их �р�ще �ты��ать и у��вершен�тв�вать и, �а�
44 Глава 1. Windows Script Host �удет ���а�ан� ���же, их �удет �р�ще и���ль��вать в ��не �ри�лашени� ���андн�й �тр��и. Вы��лните �ледующие дей�тви�: 1. Щел�ните на �н���е Пуск (S�����[Все] Программы ([A��] P�og��ms�Стандартные (A���sso���s�Командная строка (Comm��d P�omp��. (В� в�ех ��тальных �е�тах эт�й �ни�и � �уду ��и�ывать эт� дей�твие �а� «От�р�йте ��н� ���андн�й �тр��и.� 2. На�ерите �ледующие три ���анды, нажи�а� ���ле на��ра �ажд�й и� них �ла� вишу Ввод: c: mkdir \scripts cd \scripts Те�ерь лю��й дру��й чел�ве�, ��ль�ующий�� ваши� ����ьютер��, ��жет уви� деть �ценарии в эт�й �а��е и в����ль��вать�� и�и. Н� вр�д ли ва� �ах�чет��, чт��ы дру�ие ��ль��ватели и�ели в����жн��ть и��ен�ть ваши �ценарии, ведь т��да �ни ���ут �а�тавить ваш �ценарий ��вершать �а�ие�ни�удь нежелательные дей�тви�, на�ри�ер на�начить �в�ей учетн�й �а�и�и �рава �и�те�н��� ад�ини�трат�ра. К��да в �ледующий ра� вы �а�у�тите �в�й �ценарий, их ра���р�жени� �удут выдавать�� � и���ль��вание� �ривиле�ий, �ринадлежащих вашей учетн�й �а�и�и. Вы даже ��жете ни���да не у�нать �� эт��, ��эт��у нужн� �делать та�, чт��ы и��ен�ть ваши �ценарии ���ли т�ль�� вы �а�и. ▼) К сожалению, Windows нужно защищать не только от взломщиков, но и от неосмотрительных поступков и случайных вмешательств других людей. Хорошо, что заняться этим придется толь- ко один раз. Дл� �ащиты вашей �а��и �ценариев в W��dows 7, V�s�� и XP P�o��ss�o��� вы� W��dows 7, V�s�� и XP P�o��ss�o��� вы� 7, V�s�� и XP P�o��ss�o��� вы� V�s�� и XP P�o��ss�o��� вы� и XP P�o��ss�o��� вы� XP P�o��ss�o��� вы� P�o��ss�o��� вы� P�o��ss�o��� вы� вы� ��лните �риведенную далее ���лед�вательн��ть дей�твий. Е�ли вы ра��таете � W��dows XP Hom� �d���o�, эти же дей�тви� ��жн� вы��лнить, т�ль�� �ере�а�ру�ив ����ьютер дл� ра��ты в �е���а�н�� режи�е (S��� Mod��. (В данн�� �лучае эт� не та��е уж и ��льш�е неуд���тв�.� Сделайте �ледующее: 1. Щел�ните на �н���е Пуск (S����� и вы�ерите [Мой] Компьютер ([My] Compu����. 2. Вы�ерите Локальный диск (C:) (Lo��� D�sk (C:��. 3. В �рав�й �анели найдите �в�ю �а��у �ценариев scripts. Щел�ните на эт�й �а��е �рав�й �н����й �ыши и вы�ерите Свойства (P�op�����s�. 4. Вы�ерите в�лад�у Безопасность (S��u���y�. 5. П�д над�и�ью Группы или пользователи (G�oup O� Us�� N�m�s� щел�ните �� �череди на �ате��ри�х Прошедшие проверку (Au�h��������d Us��s�, Пользова- тели (Us��s� и Любые другие (�v��yo��� или на лю��й и� этих �ате��рий, е�ли �на �ри�ут�твует в ��и��е. П��ле вы��ра �ажд�й и� этих �ате��рий ���трите на нижнюю ча�ть ��на и �р�верьте, �т��т ли флаж�и на�р�тив �ун�та Запись (W����� или Изменение (Mod��y�. Флаж��в та� �ыть не д�лжн�. Е�ли ни для одной дл� этих �ате��рий учетных �а�и�ей флаж�и не �т��т, �ерех�дите � вы� ��лнению �ун�та 9.
Создание своего первого файла сценария 45 6. Н� е�ли на�р�тив �ун�та Изменение (Mod��y� ли�� �ун�та Запись (W����� флаж�� �т�ит дл� х�т� �ы и� �дн�й и� этих �ате��рий, щел�ните на �н���е Дополнительно (Adv����d� и �ри�ту�айте � вы��лнению �ун�та 6. 7. В W��dows 7 щел�ните на �н���е Изменить разрешения (Ch��g� P��m�ss�o�s�. В W��dows V�s�� щел�ните на �н���е Редактировать (�d���. С�р��ьте флаж�� Добавить разрешения, наследуемые от родительских объектов (I���ud� I�h�����b�� P��m�ss�o�s F�om Th�s Obj���’s P������ и в ���вивше��� диал���в�� ��не щел� �ните на �н���е Добавить (Copy�. �. П�вт�рите �ледующие три дей�тви� дл� �ажд�й и� �ате��рий Пользователи (Us��s�, Прошедшие проверку (Au�h��������d Us��s� и Любые другие (�v��yo���, е�ли �ни �ри�ут�твуют в ��и��е: 1� В �т�л�це Имя (N�m�� вы�ерите Пользователи (Us��s� и щел�ните на �н���е Изменить (�d���. 2� У�едите�ь в т��, чт� в ��ле Применять (App�y To ���m� (�лиже � верхне�у �раю ��на� у�тан�влен� �начение Для этой папки, ее подпапок и файлов (Th�s Fo�d��, Sub�o�d��s ��d F���s�. Е�ли не��х�ди��, и��ените �начение на у�а�анн�е. 3� У�едите�ь в т��, чт� у�тан�влены т�ль�� четыре флаж�а: Траверс папок / выполнение файлов (T��v��s� Fo�d����x��u�� F����, Содержание папки / чтение данных (L�s� Fo�d���R��d D����, Чтение атрибутов (R��d A����bu��s� и Чтение дополнительных атрибутов (R��d �x���d�d A����bu��s�. С�р��ьте лю�ые дру� �ие флаж�и, ���ле че�� наж�ите OK. П�вт�рите эти три дей�тви� дл� �ледующих дру�их �ате��рий, е�ли �ни �ри�ут�твуют в ��и��е: Прошедшие проверку (Au�h��������d Us��s� и Любые другие (�v��yo���. 9. Наж�ите OK. 10. Те�ерь вы нах�дите�ь в и�х�дн�� диал���в�� ��не Свойства: scripts (S���p�s P�op�����s�. В V�s�� и в W��dows 7 щел�ните на �н���е Изменить (�d���. 11. Щел�ните на �н���е Добавить (Add�, �ате� на �н���е Дополнительно (Adv����d�, ���ле че�� щел�ните на �н���е Поиск (F��d Now�. В ра�деле Ре- зультаты поиска (S����h R�su��s� найдите �в�ю ����твенную учетную �а�и�ь, дважды щел�ните на ней, а �ате� наж�ите OK. 12. Те�ерь ваша учетна� �а�и�ь д�лжна ���вить�� в ��и��е Группы или пользователи (G�oup O� Us�� N�m�s�. В нижней ча�ти ��на у�тан�вите флаж�� Полный доступ (Fu�� Co���o��, е�ли W��dows ���в�л�ет ва� эт� �делать; е�ли нет, т� в��лне д��тат�чн� �удет у�тан�вить флаж�� Изменение (Mod��y�. 13. Наж�ите OK дл� �авершени� в�е�� �р�це��а. 14. В�т те�ерь у ва� е�ть ���т��нна�, �ащищенна� �а��а дл� хранени� �ценариев. В �удуще�, чт��ы вернуть�� � эт�й �а��е, вы��лните �ледующие дей�тви�: 15. От�р�йте ��н� ���андн�й �тр��и. 16. На�ерите �ледующие две ���анды: c: cd \scripts
46 Глава 1. Windows Script Host Чуть ���же �удет ���а�ан�, �а� ���е�тить эту �а��у в PATH���и��� ����ью� PATH���и��� ����ью� ���и��� ����ью� тера, чт��ы �ценарий ��жн� �ыл� �а�у��ать на вы��лнение на��р�� е�� и�ени в ��не ���андн�й �тр��и. Ну а те�ерь давайте ���дади� �в�й �ервый �ценарий. Создание сценария П��ле т��� �а� ��н� ���андн�й �тр��и �удет �т�рыт� дл� вашей �а��и �ценариев, на�ерите �ледующую ���анду: notepad firstscript.vbs Она �т�р�ет Бл��н�т. На�ерите �ледующую ���анду т�чн� в та��� виде, �а� �на ���а�ана �де�ь: wscript.echo "Это сообщение выведено из моего первого сценария" Щел�ните на �ун�тах �еню Файл (F����, Сохранить (S�v��, ���ле че�� �а�р�йте Бл��н�т. Те�ерь в ��не ���андн�й �тр��и на�ерите �ледующую ���анду: wscript firstscript.vbs В ре�ультате ���вит�� не��льш�е ��н� � те��т�� Это сообщение выведено из моего первого сценария. Вы �а�тавили W��dows вы��лнить и�еющую�� в WSH �р��ра��у ��ра��т�и �ценариев wscript �ри�енительн� � файлу �rstscript.vbs, а �це� нарий �а�тавил W��dows выве�ти ����щение. Наж�ите OK, чт��ы �а�рыть ��н� ����щени�. В�т те�ерь вы ���дали и вы��л� нили �в�й ����твенный �ценарий. В �удуще�, чт��ы ���дать н�вый �ценарий, нужн� вы��лнить анал��ичные дей�тви�: 1. От�рыть ��н� ���андн�й �тр��и. 2. Е�ли нужн� ���е�тить �ценарий в �в�ю универ�альную �а��у �ценариев, на� �рать ���анды c: и cd\scripts. (Е�ли нужн�, �ценарии ��жн� ���давать на дру�их ди��ах и в дру�их �а��ах, дл� эт��� нужн� �р��т� на�рать дру�ую �у�ву ди��а или дру��й �уть � �а��е.� 3. На�рать notepad, ���ле че�� на�рать и�� �ценари�. ▼▼ При создании нового файла сценария откройте окно командной строки и наберите слово «note- note- pad», а следом за ним наберите имя файла, который нужно создать, например: notepad newscript.vbs Можно также указать путь, если нужно, чтобы файл был помещен в указанную папку, напри- мер: notepad c:\scripts\newscript.vbs После того как Блокнот выведет окно с вопросом о том, хотите ли вы создать новый файл, нужно будет щелкнуть на кнопке Да (�e s). Если Блокнот запущен без набора имени файла в командной строке, ваш новый файл нужно будет сохранить, используя пункты меню Файл (File)Сохранить как (Save As). Сценарий будет сохранен под именем newscript.vbs.txt, после чего вам придется переименовать файл. Указание имени файла в командной строке позволяет обойтись без этой проблемы. Св�ю �а��у \scripts вы ��жете и���ль��вать дл� хранени� �ценариев, ��лучен� ных и� дру�их и�т�чни��в или �а�руженных и� Интернета.
Создание своего первого файла сценария 47 Средства редактирования сценариев В данн�й �ни�е � ���а�ываю, �а� дл� ���дани� и реда�тир�вани� �ценариев и дру�их �а�етных файл�в ��жн� и���ль��вать �тандартную в������ательную �р��ра��у W��dows Бл��н�т. Эта �р��ра��а в��лне ��равл�ет�� � нашей �а� W��dows Бл��н�т. Эта �р��ра��а в��лне ��равл�ет�� � нашей �а� Бл��н�т. Эта �р��ра��а в��лне ��равл�ет�� � нашей �а� дачей, � �а� �н��ие ��ды ниче� �р��е Бл��н�та не ��ль��вал��, н�, ���р���вав ра���атривае�ые далее �ред�тва и у�едивши�ь в их невер��тн�й ��ль�е, � ра��� �лил�� �а� на �е�� — � че� же � ду�ал раньше? Х�р�шее �ред�тв� реда�тир�вани� �ценариев ��жет �э��н��ить �а��у вре�ени и нерв�в, ��у�ивши�ь в�е�� �а �дин день. Суще�твует не���ль�� х�р�ших �р��ра�� реда�тир�вани�, не��т�рые и� них �еречи�лены ниже. Неважн�, �т� вы — начинающий ���датель �ценариев или на�т��щий �р�фе��и�нал: � на�т��тельн� ре���ендую ��тратить�� на �дн� (или не���ль��� и� �ледующих �ред�тв. Таблица 1.2. Средства редактирования сценариев от сторонних производителей Программа Описание V�S�d�� V�S�d�� — не т�ль�� те��т�вый реда�т�р. Эт� �ред�тв� ���в�л�ет та�же ��у� ще�твл�ть ��ша��в�е интера�тивн�е вы��лнение (�тлад�у� ваших �ценариев и дает в����жн��ть �р���атривать ��держи��е �ере�енных �� �ере вы��л� нени� �ценари�. Он� та�же �ред��тавл�ет ин�тру�ент дл� �р����тра ��ъ� е�т�в — Obj��� ��ows��, ра���атривае�ый в �лаве 3. К д���лнительны� �в�й� �тва� �тн���т�� цвет�в�е выделение �инта��и�а и «авт��авершение», ��т�р�е ��жет �э��н��ить на на��ре те��та �а��у ваше�� вре�ени. М�жн� �е��латн� и��ытать эт� �ред�тв� в ра��те и ��лн��тью ра��л��ир�вать в�е е�� фун�ции �а 59 д�ллар�в, е�ли ��ратить�� � ве���айту www.vbsedit.com. П��р��уйте � ни� ��ра��тать, и � ��ещаю, чт� � Бл��н�ту вы уже ни���да не вернете�ь Adm��� S���p��d��o� Ка� и V�S�d��, Adm��S���p��d��o� в�лючает цвет�в�е выделение �инта��и�а, авт��авершение и интера�тивный �тладчи�. Кр��е эт��� в не�� д��авлены �а�тера дл� ����щи в на�и�ании �л�жных �ценариев, �в��анных � и���ль� ��вание� ин�тру�ентари� у�равлени� W��dows M���g�m��� I�s��um������o� и A���v� D�����o�y, и �н� �ред��тавл�ет д���лнительные ��ъе�ты, ���в�� л�ющие ���давать интера�тивные ф�р�ы и �р��ра��ы. В не� та�же е�ть ��ддерж�а W��dows Pow��Sh���. Эт� �ред�тв� ��жн� �а�ру�ить � ве���айта www.adminscripteditor.com �а 100 д�ллар�в P��m��S���p� П��тавщи�и эт�й ве�ь�а и��щн�й �р��ра��ы реда�тир�вани� �ценариев на�вали ее P��m��S���p�. Она �е�у�л�вн� лучше Бл��н�та, н� �а�рашивае� �а� �а нее на ве���айте www.sapien.com �у��а в 179 д�ллар�в �ерев�дит ее в �ате��рию не дл� в�ех U�����d�� U�����d�� не �вл�ет�� ��ециали�ир�ванны� �ред�тв�� дл� реда�тир�вани� �ценариев, н� в�е равн� �а�луживает вни�ани�, е�ли тре�ует�� �ерье�� ный ��дх�д � реда�тир�ванию те��т�вых файл�в и данных. U�����d�� ва� ���йдет�� в 59 д�ллар�в 99 цент�в. У не�� ��р��ный �еречень ��ле�ных �в�й�тв. Х�т� �н� не ���жет ����чь в �тлад�е �ценариев, н� �ат� �н� ��жет �ани�ать�� ра�н���ра�н�й ��ртир�в��й, ��и����, �ре��ра��вание� и ра�� �иение� те��та на фра��енты. При реда�тир�вании файл�в �ценариев �н� авт��атиче��и ��уще�твл�ет ��нтра�тн�е и цвет�в�е выделение �р��ра��ы и �лючевых �л�в �ценари� и эле�ент�в �инта��и�а. Эт� �ред�тв� д��ту�н� на ве���айте www.ultraedit.com
48 Глава 1. Windows Script Host Как Windows запускает сценарии В �ри�ерах �редыдуще�� ра�дела у���инал��ь, чт� �ценарий ��жн� �а�у��ать дв�йны� щелч��� на �нач�е е�� файла в W��dows �xp�o��� или �уте� на��ра ��� W��dows �xp�o��� или �уте� на��ра ��� �xp�o��� или �уте� на��ра ��� �xp�o��� или �уте� на��ра ��� или �уте� на��ра ��� �анды в ��не ���андн�й �тр��и. В данн�� ра�деле эт�т в��р�� �удет ра����трен ��лее ��др��н�. Wscript и Cscript WSH и�еет две ра�н�видн��ти: ���нную вер�ию, на�ывае�ую Ws���p�, и вер� и�еет две ра�н�видн��ти: ���нную вер�ию, на�ывае�ую Ws���p�, и вер� Ws���p�, и вер� ,ивер� �ию ���андн�й �тр��и — Cs���p�. Лю�а� и� этих вер�ий ��жет �а�у��ать лю��й �ценарий. Ра�ница �ежду ни�и �а�лючает�� в т��, чт� ���нна� вер�и� (ws���p�� ���а�ывает ����щени� те��т�в��� выв�да в ���вл�юще��� диал���в�� ��не, а вер� �и� ���андн�й �тр��и (�s���p�� выв�дит те��т, ��ль�у��ь ��ычны� �ехани���� «�тандартн��� выв�да», ��т�рый �ри�ен�ет�� �р��ра��а�и, �а�ущенны�и в ��не ���андн�й �тр��и. Чт��ы ��н�ть, � че� идет речь, вы��лните �ледующие дей�тви�: 1. От�р�йте ��н� ���андн�й �тр��и. 2. Е�ли вы еще не ���дали файл firstscript.vbs � ����щью ���лед�вательн��ти дей�твий, у�а�анн�й в ра�деле «С��дание �в�е�� �ерв��� файла �ценари�», т� эт� нужн� �делать �ейча�. Е�ли эт�т файл уже ���дан, верните�ь в �а��у \s���p�s на�рав дл� эт��� ���анды c: cd \scripts 3. На�ерите ���анду wscript firstscript.vbs и наж�ите �лавишу Ввод. Чт��ы �а�рыть ��н�, наж�ите OK. 4. На�ерите ���анду cscript firstscript.vbs и наж�ите �лавишу Ввод. На эт�т ра� ����щение ���вит�� в ��не ���андн�й �тр��и. Ре�ультаты ��жн� увидеть на ри�. 1 .5 . Рис. 1.5 . Вывод учебного сценария, запущенного с помощью wscript (на первом плане) и с помощью cscript (на втором плане) Ws���p� ��льше ��дх�дит дл� �ценариев, ��т�рые ра��тают �е� �а�их�ли�� внешних �р��влений и выв�д�т ��ль��вателю �чень �ал� инф�р�ации, т� е�ть
Как Windows запускает сценарии 49 дл� та�их �ценариев, ��т�рые, на�ри�ер, выв�д�т т�ль�� ����щени� �� �ши��ах и, в����жн�, ����щение вр�де «Ра��та �авершена» (�а� т�т �ценарий, ��т�рый �рив�дил�� в �аче�тве �ри�ера ранее�. Преи�уще�тв� и���ль��вани� в��лывающе�� ��на �а�лючает�� в т��, чт� ���а ���а�ывает�� ����щение, вы��лнение �ценари� �ри��танавливает�� в �жидании �р�чтени� ����щени� и �а�рыти� диал���в��� ��на. Cs���p� �вл�ет�� вер�ией WSH дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� �вл�ет�� вер�ией WSH дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� WSH дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� н��, или в ��н��льн�� режи�е�. Cs���p� выв�дит ре�ультаты в ��н� ���андн�й �тр��и, ��т�р�е ��дражает �тар�й �реде ���андн�й �тр��и DOS. Эта вер�и� ��льше ��дх�дит дл� �ценариев, �енерирующих ��льш�й ��ъе� выв�ди��й инф�р�ации, на�ри�ер ли�тин�и �атал���в, и дл� �ценариев, чей выв�д вы желаете ���е�тить в файл. Преи�уще�тва и���ль��вани� Cs���p� дл� �ценариев, �т��ражающих ��льш�й ��ъе� выв�ди��й инф�р�ации, или дл� тех �ценариев, чей выв�д вы х�тите ��� ра�атывать � и���ль��вание� дру�их �р��ра��, �а�лючает�� в т��, чт� ве�ь их выв�д ��жн� �ерена�равить в файл, и���ль�у� �тандартную техн�л��ию ���анд� н�й �тр��и. Следующа� ���анда �а�у��ает файл �ри�ера �ценари� script0101.vbs и ��хран�ет выв�д в файле �� и�ени results.txt: cscript script0101.vbs >results.txt Ре�ультаты ��жн� �р����треть, на�рав ���анду: notepad results.txt ▼) Это хороший способ просмотра вывода сценария, генерирующего большой объем текста. Если им не воспользоваться, вывод будет прокручиваться в окне командной строки, и его верхняя часть будет исчезать. Вы ��жете и���ль��вать лю��й ��ра��тчи� �ценари�, �твечающий ваши� �ред��чтени��. В �ледующе� ра�деле �удут ���а�аны ра�личные ������ы �а�у��а �ценариев. Способы запуска сценариев Ка� и�ве�тн�, W��dows ��ычн� �редла�ает не���ль�� �������в вы��лнени� �дних и тех же �адач, и���ль�у� щелч�и, дв�йные щелч�и, щелч�и �рав�й �н����й �ыши или �ерета��ивание �нач��в. В�е эт� в ��лн�й �ере �тн��ит�� и � �а�у��у �цена� риев. В та�л. 1 .3 ���а�ан� ше�ть �������в �а�у��а файла �ценари� на вы��лнение. Таблица 1.3. Способы запуска файла сценариев Действие Управляет запуском Дв�йн�й щелч�� на �нач�е файла в �xp�o���, в ��не ��и��а файл�в или на Ра��че� �т�ле. (В W��dows V�s�� ��жет �ыть выведен� ��н� � �реду�реждение� �и�те�ы �е���а�н��ти; дл� �а�у��а �ценари� нужн� щел�нуть на �н���е Открыть (Op���. К эт�й те�е �ы еще верне���.� Х��т, и���ль�уе�ый �� у��лчанию продолжение
50 Глава 1. Windows Script Host Щелч�� на �нач�е файла �рав�й �н����й �ыши и вы��р �ун�та Открыть (Op��� Ws���p� Щелч�� на �нач�е файла �рав�й �н����й �ыши и вы��р �ун�та Открыть в командной строке (Op�� w��h Comm��d P�omp�� Cs���p� На��р и�ени файла �ценари� в ���андн�й �тр��е, в ��ле ��и��а �еню Пуск (S����� W��dows 7�V�s��, в диал���в�� ��не Выполнить (Ru�� или в �рлы�е*. Х��т, и���ль�уе�ый �� у��лчанию На��р cscript или wscript � и�ене� файла �ценари� в ���андн�й �тр��е, в диал���в�� ��не Выполнить (Ru�� или в �рлы�е**. У�а�анный х��т Перета��ивание �дн��� или не���ль�их файл�в на �нач�� файла �ценари� в �xp�o��� или на Ра��че� �т�ле Х��т, и���ль�уе�ый �� у��лчанию * В Windows 7, Vista, XP, NT и 2000 набирать расширение файла сценария (.vbs, .pl или любое дру гое) нет необходимости. Можно просто набрать основу имени файла. Если же вы все еще используете Windows 95, 98 или Me, в имя файла нужно включить и расширение. ** Если Wscript или Cscript запускаются явным образом с указанием имени, то нужно всегда указы вать и расширение имени файла сценария. ▼▼ Теперь вам нужно испробовать каждый из этих методов на своем компьютере, используя для этого ранее созданный учебный сценарий �rstscript.vbs. За�етьте, чт� �ри щелч�е �рав�й �н����й �ыши в ������ах, �де фи�урируют «ws���p�» и «�s���p�», вы�ирает�� ��н�ретный х��т, ли�� Ws���p�, ли�� Cs���p�. В трех ��тальных ������ах и���ль�ует�� х��т, на�наченный �� у��лчанию, и эту на�тр�й�у ��жн� и��енить. И�начальн� W��dows и���ль�ует в �аче�тве х��та �� у��лчанию ws���p�. Е�ли нужн�, х��т, и���ль�уе�ый �� у��лчанию, ��жн� и��е� ws���p�. Е�ли нужн�, х��т, и���ль�уе�ый �� у��лчанию, ��жн� и��е� . Е�ли нужн�, х��т, и���ль�уе�ый �� у��лчанию, ��жн� и��е� нить, на�рав в ��не ���андн�й �тр��и �дну и� �ледующих ���анд: y y wscript //H:wscript ← У�тан�в�а ws���p� в �аче�тве х��та �� у��лчанию; y y wscript //H:cscript ← У�тан�в�а �s���p� в �аче�тве х��та �� у��лчанию. В���ще�т�, �ри ра�ра��т�е н�вых �ценариев, наверн�е, ��льше ��д�йдет вер�и� ���андн�й �тр��и (�s���p��, �����ль�у ва�, ���рее в�е��, �ах�чет��, чт��ы ваш �ценарий выв�дил �тлад�чные �а�ечани�, ��ле�чающие ��ни�ание �р�и�х�д�� ще��. Следует ���нить, чт� даже ���ле у�тан�в�и в �аче�тве х��та �� у��лчанию �s���p� вы в�е�да ���жете �ринудительн� решить в��р�� в �тн�шении �тдельных �ценариев: ��жн� �а�у�тить �ценарий � и���ль��вание� �рав�й �н���и �ыши или �вны� ��ра��� на�рать в ���анде и�� х��та cscript или wscript. ▼) Во всей остальной части этой главы будут рассмотрены менее явные подробности запуска WSH и способы взаимодействия с этим средством. Если у вас нет опыта создания сценариев и про- граммирования, этот материал можно просто бегло просмотреть и перейти к главе 2. Следую- щий материал предназначен для совершенствования знаний, и его изучение будет иметь смысл после приобретения некоторого опыта работы с VBScript. Таблица 1.3 (продолжение)
Как Windows запускает сценарии 51 Передача информации в сценарии К��андна� �тр��а, и���ль�уе�а� дл� �а�у��а Ws���p� или Cs���p�, ��жет ф�р�ир�� Ws���p� или Cs���p�, ��жет ф�р�ир�� или Cs���p�, ��жет ф�р�ир�� Cs���p�, ��жет ф�р�ир�� , ��жет ф�р�ир�� вать�� � ����щью �рлы�а, диал���в��� ��на Выполнить (Ru��, вы�ывае���� чере� �н���у Пуск (S�����, или ���вл�ть�� в ре�ультате на��ра в ��не ���андн�й �тр��и. Е�ли �ценарий и�еет �а��д��тат�чный хара�тер (т� е�ть в не� и�еет�� в�� инф�р� �аци�, не��х�ди�а� дл� вы��лнени� е�� �адачи�, ��жн� �р��т� вве�ти е�� и��. Н�, �ача�тую, ��ле�н� ���давать ��лее универ�альные �ценарии, у�а�ыва� и� �ри �а�у��е не��т�рую инф�р�ацию. Х�р�ши� �ри�ер�� ��жет ���лужить �дин и� уче�ных �ценариев, ра����тренных ранее в данн�й �лаве: в не� и�� �а��и, в ��т�р�й нужн� ��ределить ��щий ра��ер в�ех и�еющих�� файл�в, в�тр�ен� в �а� �ценарий. Г�ра�д� ��ле�нее �удет �ред��тавить в����жн��ть у�а�ывать и�� �ледуе�ую �а��у �ри �а�у��е �ценари�, т��да �дин и т�т же �ценарий ��жн� �удет и���ль��вать дл� ��д�чета ��ще�� ра��ера файл�в в лю��й �а��е. Один и� �������в вы��лнени� данн�й �адачи �а�лючает�� в т��, чт��ы �а� �тавить �ценарий выдавать �тр��у �ри�лашени� (или �а�р��а�, �де ��ль��ватель ��� �ы на�рать лю�ую нужную инф�р�ацию. Ка� эт� делает��, �удет ра����трен� в �лаве 2. Еще �дин ������ �а�лючает�� в у�а�ании та��й инф�р�ации в ���андн�й �тр�� �е �ри �а�у��е �ценари�. На ����ьютерн�� жар��не инф�р�аци�, �ередавае�а� �р�цедуре, �а��в�й �вл�ет�� и файл �ценари�, на�ывает�� ар�у�ента�и. В �леду� ющей ���андн�й �тр��е myscript.vbs и c:\windows �вл�ют�� дву�� ар�у�ента�и, �ередавае�ы�и �р��ра��е wscript: wscript myscript.vbs c:\windows В ���андн�й �тр��е ws���p� ар�у�енты начинают�� � двух �и�в�л�в �р����� �лэша (//�, �адающих �люч, у�равл�ющий ра��т�й �а���� х��та ws���p�, а �ервый ар�у�ент имя_файла �вл�ет�� и�ене� �а�у��ае���� �ценари�. Лю�ые дру�ие ар�у� �енты �ередают�� файлу �ценари� дл� е�� интер�ретации �� �в�е�у ����твенн��у у���трению. Пред��ределенн��� �начени� у ар�у�ент�в не и�еет��, ��эт��у ��ре� деление ��р�д�а их и���ль��вани� и вли�ни� на �ценарий в��ла�ает�� на �р��ра�� �и�та �ценари�. В �дн�� �ценарии д���лнительные ар�у�енты ���андн�й �тр��и ���ут и���ль��вать�� дл� инди�ации и�ен удал�е�ых �а���. В дру��� �ценарии �ни ���ут ра�решать или �а�рещать вы��лн�е�ые �ценарие� фун�ции. У �ажд�� �� ��ы�а �ценариев и�еет�� �в�й ����твенный ������ ��лучени� инф�р�ации и� ар�у�ент�в, �ереданных �ценарию в ���андн�й �тр��е �а�у��а. Е�ли вы �на���ы � на�и�ание� �а�етных файл�в DOS, ��жете в����нить, чт� �е�т�, �де в �а�етн�� файле ���вл�ет�� �ру��а �и�в�л�в «%1», �а�ен�ет�� �начение� �ерв��� ар�у�ента ���андн�й �тр��и. WSH ��е��ечивает д��ту� � ар�у�ента� ���андн�й �тр��и �у� WSH ��е��ечивает д��ту� � ар�у�ента� ���андн�й �тр��и �у� ��е��ечивает д��ту� � ар�у�ента� ���андн�й �тр��и �у� те� и���ль��вани� �в�й�тва, на�ывае���� ��ъе�т�� WS���p� (��др��н��ти �удут ра����трены в �лаве 3�. В V�S���p� �ервый ар�у�ент, на�ранный в ���андн�й �тр�� V�S���p� �ервый ар�у�ент, на�ранный в ���андн�й �тр�� �ервый ар�у�ент, на�ранный в ���андн�й �тр�� �е ���ле и�ени �ценари�, ����начает�� �а� WScript.Arguments(0). Вт�р�й ар�у�ент ����начает�� �а� WScript.Arguments(1) и т. д . На�ри�ер, ��ерат�р dir = WScript.Arguments(0) �ри�ваивает �начение �ерв��� ар�у�ента �ере�енн�й dir.
52 Глава 1. Windows Script Host ▼) Кстати, использование слова WScript для обозначения объектов WScript.echo и WScript.Argu- WScript для обозначения объектов WScript.echo и WScript.Argu- для обозначения объектов WScript.echo и WScript.Argu- WScript.echo и WScript.Argu- .echo и WScript.Argu- echo и WScript.Argu- и WScript.Argu- WScript.Argu- .Argu- Argu- ments остается неизменным, независимо от того, какой хост использован для запуска сцена- остается неизменным, независимо от того, какой хост использован для запуска сцена- рия, wscript или cscript. В данном случае WScript ссылается на имя объекта, предоставляемого хостом сценария, и он называется WScript, независимо от версии, с помощью которой запущен сценарий. Конечно, это вызывает некоторую путаницу. Мы ��же� �ере�и�ать и�х�дный уче�ный �ценарий, чт��ы в����ль��вать�� ар�у�ент��: ' s cript0102.vbs ' Общее пространство, занимаемое каталогом, указанным в командной строке dir = WScript.Arguments(0) set Fsys = CreateObject("Scripting.FileSystemObject") totsize = 0 for each file in Fsys.GetFolder(dir).Files totsize = totsize + file.size next wscript.echo "Общий размер файлов в " , dir, " составляет " , totsize О�ратите вни�ание на т�, чт� эт�т �ценарий �тличает�� �т �в�ей ��лее ранней вер�ии т�ль�� �������� �ри�ваивани� �начени� �ере�енн�й dir в третьей �тр��е. Те�ерь �ы ��же� на�рать в ���андн�й �тр��е �ледующие ���анды дл� ��д�чета ��ще�� ра��ера файл�в ���твет�твенн� в �атал��ах Temp и Windows: script0102 c:\temp script0102 c:\windows Н� ���да дл� ��д�чета �ы ���ытае��� у�а�ать �а��у, в и�ени ��т�р�й �ри�ут� �твуют �р��елы, в��ни�нет �р��ле�а. На�ри�ер, � ���у на�рать script0102 c:\Program Files\Internet Explorer W��dows ��ла�ает, чт� �р��елы в эт�� длинн�� �утев�� и�ени ���а�ывают, чт� �ы у�а�али три �тдельных ар�у�ента: y WScript.Arguments(0) = c:\Program y WScript.Arguments(1) = Files\Internet y WScript.Arguments(2) = Explorer Решение эт�й �р��ле�ы ���т�ит в �а�лючении не�равильн� ра��тающе�� те��та в дв�йные �авыч�и (""�, чт��ы �и�те�а W��dows �нала, чт� эт�т те��т нужн� в��� W��dows �нала, чт� эт�т те��т нужн� в��� �нала, чт� эт�т те��т нужн� в��� �рини�ать �а� �дин длинный эле�ент: script0102 "c:\Program Files\Internet Explorer" И���ль��вание ар�у�ент�в ���андн�й �тр��и в ваших ����твенных �ценари�х �����ает ���давать ��лее универ�альные и ��ле�ные ин�тру�енты. П�дтверждение эт��у �удет дан� в не���ль�их �ри�ерах, ��т�рые вы найдете далее в эт�й �ни�е. Сохранение результатов работы сценариев Е�ли нужн�, чт��ы �ценарий �а�и�ывал инф�р�ацию, а не �р��т� выв�дил ее на э�ран, е�ть два варианта дей�твий.
Как Windows запускает сценарии 53 В���ервых, ��жн� в����ль��вать�� х��т�� �s���p� и �а�тавить �ценарий выв�� �s���p� и �а�тавить �ценарий выв�� и �а�тавить �ценарий выв�� дить ре�ультаты �в�ей ра��ты в ��н� ���андн�й �тр��и. Ка� эт� вы�л�дит, �ыл� ���а�ан� ранее на ри�. 1 .5 . Эт�т выв�д ��жн� ��хранить в файле �уте� е�� �ерена�равлени�. Е�ли д�� �авить � лю���у и�ени �а�у��ае��й в ���андн�й �тр��е �р��ра��ы �тр��у >ка койнибудь_файл, ее вых�д �удет ��хран�ть�� в файле � и�ене� какойнибудь_ файл. Зате� эт�т файл ��жн� ра��ечатать, ��ра��тать е�� � ����щью �а��й�ни�удь дру��й �р��ра��ы, �р����треть е�� ��держи��е в Бл��н�те и т. д . Ра����три� �ри�ер: cscript script0102.vbs c:\windows >wincount.txt Эта ���анда �а�у�тит �дин и� наших уче�ных �ценариев и ��хранит ре�ультаты в файле wincount.txt. Зате� ре�ультаты ��жн� �удет �р����треть в Бл��н�те � ��� ��щью �ледующей ���анды: notepad wincount.txt Е�ли выв�д желательн� �р����треть в ��не ���андн�й �тр��и, н� инф�р�ации �лиш��� �н��� и ее нев����жн� �р�читать �ра�у на �дн�� э�ране, ��жн� в����ль� ��вать�� ���анд�й more � �ехани���� �анала (|�: cscript script0102.vbs c:\windows | more В данн�� �лучае �и�в�л | �а�тавл�ет W��dows �т�равить выв�д ваше�� �це� W��dows �т�равить выв�д ваше�� �це� �т�равить выв�д ваше�� �це� нари� в� в�тр�енную в W��dows �р��ра��у more, �т��ражающую эт�т выв�д ��� э�ранн�. Перех�д �т �дн��� э�рана � дру���у ��уще�твл�ет�� нажатие� �лавиши Пробел. Вт�р�й ������ ��хранени� инф�р�ации, ��енерир�ванн�й �ценарие�, �а�люча� ет�� в т��, чт��ы �а�тавить �р��ра��у �ценари� ���давать файл не���ред�твенн�, и���ль�у� ��ерат�ры в �а��� �ценарии. Эт�т ������ �удет ра����трен в �лаве 4 «Д��ту� � файла� и рее�тру». Ключи Wscript и Cscript Ра���атрива� ар�у�енты ���андн�й �тр��и, �ы у���инали, чт� � ����щью этих ар�у�ент�в ��жн� у�равл�ть ��ведение� �р��ра�� �s���p� и ws���p�. Ра�у�еет��, дл� и��енени� ��ведени� ws���p� или �s���p� в ���андную �тр��у ��жн� д��авить �ра�у не���ль�� ��ециальных ар�у�ент�в. При �ажд�� �а�у��е �р��ра��а �s���p� ��ычн� выв�дит ����щение, �редше� �твующее лю��й инф�р�ации, выв�ди��й ваши� �ценарие�. На�ри�ер, е�ли на�рать cscript script0102.vbs c:\windows ре�ультат �удет и�еть �ри�ерн� �ледующий вид: Сервер сценариев Windows (Microsoft (R)) версия 5.8 (C) Корпорация Майкрософт (Microsoft Corporation), 1996–2001 . Все права защищены. Общий размер файлов в c:\windows составляет 9188167
54 Глава 1. Windows Script Host Я ���у вне�ти в ���андную �тр��у �дн� и��енение, д��авив в нее �люч //Nologo и и���ль��вав в начале эт��� �люча �р��ые, а не ��ратные �лэши: cscript //Nologo script0102.vbs c:\windows Эт� д��авление �риведет � �ледующе�у выв�ду на ди��лей: Общий размер файлов в c:\windows составляет 9188167 Эт� уже вы�л�дит на�н��� лучше. WSH ра����нает не���ль�� ��ециальных д���лнительных ар�у�ент�в, в�ереди �ажд��� и� ��т�рых �тав�т�� �и�в�лы //, чт��ы ���ве�тить х��т, чт� эт�т ар�у�ент �редна�начен дл� не�� и не �вл�ет�� че�� т�, чт� нужн� �ередать �ценарию. П�лный �еречень та�их ар�у�ент�в, или �лючей ���андн�й �тр��и, �риведен в та�л. 1 .4 . П��ле та�лицы �удут ���а�аны две ���ан� 1.4 . П��ле та�лицы �удут ���а�аны две ���ан� 1.4 . П��ле та�лицы �удут ���а�аны две ���ан� ды, у�р�щающие ра��ту �� �ценари��и, ��т�рые ��жн� �удет �ра�у же на�рать. Таблица 1.4. Ключи командной строки для wscript и cscript Ключ Эффект //H:хост У�тан�в�а хоста, ��т�ра� � данн��� ���ента �удет и���ль��вать�� �� у��лчанию. В�е�т� эле�ента хост нужн� вве�ти ws���p� или �s���p� //S С�хранение те�ущих на�тр�е� в �аче�тве и���ль�уе�ых �� у��лчанию дл� данн��� ��ль��вател�. В�е ��тальные �лючи, �еречи�ленные в эт�й та�лице, и���ль�уе�ые � �люч�� //S, �удут �а���нены дл� в�ех ���леду� ющих �а�у���в WSH, ���а на�тр�й�и �� у��лчанию не �удут и��енены в �чередн�й ра� //B И���ль��вание «�а�етн���» режи�а и ��давление лю�ых выв�д�в на э�ран ����щений �� �ши��ах �ценари� и �ри�лашени� на вв�д инф�р� �ации. О�ычн� �ши��и в �р��ра��е �ценари� �а�тавл�ют ��тан�вить е�� вы��лнение и выве�ти ����щение �� �ши��е. Ключ //B вынуждает ���р���вать �р�д�лжить вы��лнение �ценари�, не���тр� на в��ни�н�� вение �ши��и //D Ра�решение в�лючени� �тлад�и. При и���ль��вании эт��� �люча и в��� ни�н�вение �ши��и в дей�твие в�ту�ает �тладчи�, ���а�ыва� и�т�чни� �ши��и, е�ли, ��нечн� у ва� у�тан�влен W��dows S���p� D�bugg�� (или дру��е ви�уальн�е �ред�тв� �тлад�и ����ании M���oso��, на�ри�ер V�su�� S�ud�o� //E:движок И���ль��вание у�а�анн��� ��ы��в��� движка дл� ра��ты �� �ценарие�. О�ычн� WSH у�адывает �равильный движ�� на ��н�ве и�ени файла �ценари�: V�S���p� дл� файл�в .vbs, JS���p� дл� файл�в .js и т. д . Эт�т �люч �ри�ен�ет�� т�ль�� в т�� �лучае, е�ли и���ль�уют�� не��ыч� ные ра�ширени� и�ен файл�в или не��ычный ��ы�, � ��т�р�� ��жет не д��адывать�� WSH //I И���ль��вание интера�тивн��� режи�а, ��т�рый �вл�ет�� �р�тив�� ��л�жн��тью ранее ра����тренн��у �а�етн��у режи�у. П����ль�у �люч //I �вл�ет�� у�тан�в��й �� у��лчанию, е�� нужн� и���ль��вать, т�ль�� е�ли эта у�тан�в�а ранее и��ен�ла�ь � и���ль��вание� �лючей //S //B
Как Windows запускает сценарии 55 Ключ Эффект //Job:имя_за дания За�у�� �ценарн��� �адани� имя_задания и� файла .WSF . Файлы .WSF ра���атривали�ь ранее в данн�й �лаве //Logo От��ражение инф�р�ации �� авт�р��их �равах и вер�ии. (Эта у�тан�в�а и���ль�ует�� �� у��лчанию, ���а не �удет �ри�енен �люч //Nologo или на�тр�й�и не �удут и��енены на ���т��нн�й ��н�ве � ��� ��щью �лючей //S //Nologo.� //Nologo П�давление выв�да инф�р�ации �� авт�р��их �равах и вер�ии //T:nn У�тан�в�а �а��и�альн��� вре�ени в �е�ундах (nn�, в течение ��т�р��� �ценарию ра�решен� вы��лн�ть��. На�ри�ер, �люч //T:5 ��начает, чт� вы��лнение �ценари� �удет ��тан�влен�, е�ли �н� �ай�ет ��льше 5 �е� �унд. Эт�т �люч �ри��дит��, е�ли ваш �ценарий ��жет «�ави�нуть» или ���ытает�� �ерейти в режи� �е���нечн��� вы��лнени� �ри не�равиль� н�� ра�витии �итуации //X Вы��лнение �ценари� в �тладчи�е. Эт�т �люч �удет ра����трен чуть ���же в ра�деле «Отлад�а �ценариев» //U И���ль�ует�� т�ль�� � �s���p�. Пред�и�ание �s���p� выв�дить дату в ��� дир�в�е U���od�, а не в ��дир�в�е ASCII. Эт�т �люч ва�, ���рее в�е��, ни���да не �ри��дит�� Эт�т �еречень не нужн� �а���инать. М�жн� в ���андн�й �тр��е на�рать cscript /? или wscript /?, и �р��ра��а выведет ��и��� д��ту�ных �лючей. Е�ли ���е�тить �люч �? в ���андную �тр��у, ��д��ную инф�р�ацию выв�д�т �н��ие W��dows��р��ра��ы. Я ре���ендую ва� в����ль��вать�� эти�и �люча�и �р��� �ейча�, чт��ы не� �н��� у�р��тить и���ль��вание WSH. Сначала вы�лючи� выв�д инф�р�ации � вер�ии, ��т�рый �р�и�х�дит �ри �ажд�� �а�у��е �s���p� и вы�л�дит �ри�ерн� �ледующи� ��ра���: Сервер сценариев Windows (Microsoft (R)) версия 5.8 (C) Корпорация Майкрософт (Microsoft Corporation), 1996–2001 . Все права защищены. Чт��ы и��авить�� �т выв�да эт�й инф�р�ации, �т�р�йте ��н� ���андн�й �тр��и и на�ерите cscript //nologo //s Ключ //nologo �рив�дит � �а�у��у �s���p� �е� ����щени� � вер�ии, а �люч //s делает эту на�тр�й�у ���т��нн�й. Зате�, е�ли нужн� ра��тать �реи�уще�твенн� � �s���p� и е�ли вы желаете вв�� �s���p� и е�ли вы желаете вв�� и е�ли вы желаете вв�� дить в ���андн�й �тр��е �дн� т�ль�� и�� �ценари�, чт��ы �а�тавить �и�те�у �� у��лчанию �а�у��ать эт�т �ценарий � и���ль��вание� �s���p�, введите эту ���анду: cscript //h:cscript Е�ли вы х�тите ��лучить д���лнительную инф�р�ацию � �лючах ���андн�й �тр��и дл� �s���p� и ws���p�, читайте ра�дел дальше, а е�ли нет, ��жн� �ерейти � �ледующе�у ра�делу.
56 Глава 1. Windows Script Host Давайте ра����три� не���ль�� �ри�ер�в и���ль��вани� этих �лючей. Были ра����трены �лючи //S и //H. Дру�ие �лючи ��ычн� и���ль�уют�� дл� и��енени� ��ведение WSH т�ль�� в т�� �лучае, е�ли их �ри�енение �рин��ит ��ль�у в ��н� WSH т�ль�� в т�� �лучае, е�ли их �ри�енение �рин��ит ��ль�у в ��н� т�ль�� в т�� �лучае, е�ли их �ри�енение �рин��ит ��ль�у в ��н� �ретн�й ���андн�й �тр��е: cscript somescript.vbs //T:5 //B аргументы для сценария Эти �лючи �ред�и�ывают �s���p� �а�у�тить �ценарий somescript.vbs �а�� �и�у� на 5 �е�унд и не ��танавливать вы��лнение �ценари� �ри в��ни�н�вении �ши���. Дру�ие ар�у�енты �ередают�� не���ред�твенн� �ценарию. П����ль�у �люч //S �ревращает дру�ие �лючи в ���т��нные на�тр�й�и, ��д��� н� �лючу //H, е�ли нужн� на ���т��нн�й ��н�ве вы�лючить выв�д инф�р�ации �� авт�р��их �равах и � вер�ии, эт� ��жн� �делать � ����щью �ледующей ���анды: cscript //Nologo //S Ключ //S делает �люч //Nologo ���т��нн� и���ль�уе�ы� �� у��лчанию. ▼) Регистр букв при использовании ключей никакой роли не играет. Например, //T:5 и //t:5 при- T:5 и //t:5 при- :5 и //t:5 при- t:5 при- :5 при- водят к абсолютно одинаковому эффекту. ТОЛЬКО ДЛЯ ТЕХ, КТО УМЕЕТ РАБОТАТЬ С РЕЕСТРОМ... Е�ли вы х�р�ш� ра��ираете�ь в рее�тре W��dows, ва�, наверн�, �удет ��ле�� н� у�нать, �де хранит�� на�тр�ечна� инф�р�аци� WSH. При и���ль��вании �люча //S �ред��чтительные �начени� ��хран�ют�� в рее�тре в ра�деле HKE�_ CURRENT_USER\Software\Microsoft\Windows Script Host\Settings. И��енени�, �р�и�веденные � ����щью �люча на�тр�й�и и���ль�уе���� �� у��лчанию движ�а (//H�, �рив�д�т � и��енению �начений �� у��лчанию ра�дел�в рее�тра KE�_CURRENT_USER\Software\Classes\xxx\Shell, �де в�е�т� xxx �ледует у�а�ать JSFile, VBSFile, WSHFile и дру�ие ти�ы файл�в �ценариев. Значение �� у��лчанию у�танавливает�� в ��дра�делах open или open2, ���твет�твующих �ла��ла�, �еречи�ленны� в ра�делах HKE�_CLASSES _ROOT\xxx\Shell. Те�ущие интер�ретат�ры �ценариев (движ�и� �вл�ют�� DLL��и�ли�те�а�и, �аре�и�трир�ванны�и в ра�деле HKE�_CLASSES_ROOT\CLSID ��д идентифи�а� т�ра�и CLSID, �в��анны�и � �а�и���и движ��в �ценариев (на�ри�ер, HKE�_ CLASSES_ROOT\VBScript�. Ти� файла движ�а �ценариев и CLSID��ара�етры движ�а �т�ечены в ��дра�деле �� и�ени OLEScript. С ����щью �люча //E �ере�лючают�� у�тан�в�и �в��ей движ�а �уте� и��енени� ��дра�дела Command в ра�деле HKE�_CLASSES_ROOT\xxx\Shell\Open дл� �ажд��� �в��анн��� ти�а файла �ценари�. Перечень �аре�и�трир�ванных ти��в файл�в �ценариев нах�дит�� в ��дра�деле HKE�_LOCAL_MACHINE\Software\ Microsoft\Windows Scripting Host\Script Extensions. (О�ратите вни�ание на и���ль� �уе�ую �де�ь ing���вую ф�р�у �л�ва.� Эта на�тр�й�а тре�ует дл� и��енений �рав Ад�ини�трат�ра, н� не тех �рав, ��т�рые �ыли ��вышены д� данн��� ур�вн�.
Запуск своих собственных сценариев 57 Запуск своих собственных сценариев К��да вы �танете ���давать ре�ул�рн� и���ль�уе�ые �ценарии, ��жн� �удет, �на� не��т�рые ����енн��ти, ��ле�чить их ��и�� и �а�у��. В�е эти хитр��ти �удут ��� �а�аны в данн�� ра�деле. Добавление указаний на сценарии в переменную PATH Ка� уже у���инал��ь, �ри ���дании универ�альных �ценариев �ыл� �ы не�л�х� ���е�тить их в �тдельную �а��у. Чт��ы ���дать �а��у �ценариев, �ледуйте ин� �тру�ци��, �риведенны� ранее в ра�деле «С��дание и �ащита �а��и �ценариев». Зате� �а��у �ценариев ��жн� у�а�ать в ��и��е �утей PATH �и�те�ы W��dows, ��т�рый �ред�тавл�ет ����й ��и��� �а���, �де W��dows ведет ��и�� �ри вв�де и�ени в ��не ���андн�й �тр��и, в ��не Выполнить (Ru�� в W��dows XP и в ��ле ��и��а в �еню Пуск (S����� в W��dows V�s��. Е�ли ваша �а��а �ценариев д��авлена в PATH, �ценарий ��жн� �а�у�тить в лю��е вре�� и� лю��й �а��и �р��ты� вв�д�� е�� и�ени. В �ледующих ин�тру�ци�х �ред��ла�ает��, чт� �а���й �ценариев �вл�ет�� c:\scripts. М�жн� та�же ���дать �в�ю �а��у �ценариев внутри �а��и �в�е�� �ер� ��нальн��� �р�фил�, ��лучив, на�ри�ер, �а��у c:\Users\ваша_учетная_запись\ scripts. Е�ли дл� �ценариев и���ль�ует�� дру��е �е�т�, ��д�тавьте в �ледующих ин�тру�ци�х ���твет�твующее и�� �а��и в�е�т� c:\scripts. В ���твет�твии � ваши�и личны�и �ред��чтени��и, у���инание � �а��е ��� �ещает�� в ��и��� PATH дл� в�ех ��ль��вателей ваше�� ����ьютера или т�ль�� дл� вашей ����твенн�й учетн�й �а�и�и. ▼) После внесения этих изменений нужно закрыть все открытые вами окна командной строки. Из- менения будут касаться только новых окон командной строки. Windows 7 и Vista, сценарии, доступные всем пользователям Чт��ы д��авить вашу �а��у �ценариев в PATH дл� в�ех ��ль��вателей �ри ра��те в W��dows 7 и V�s��, вы��лните �ледующие дей�тви�: 1. Щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й на �ун�те Компью- тер (Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. 2. Щел�ните на �ун�те Дополнительные параметры системы (Adv����d Sys��m S�����gs� и ��дтвердите �в�и на�ерени� в ��не ��нтр�л� учетных �а�и�ей ��ль� ��вателей (Us�� A��ou�� Co���o� p�omp��. 3. Щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. 4. Найдите �а�и�ь PAT H в нижней ча�ти диал���в��� ��на и дважды щел�ните на ней �н����й �ыши. 5. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�ите �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 6. Щел�ните на �н���ах OK, чт��ы �а�рыть диал���вые ��на.
58 Глава 1. Windows Script Host Windows 7 и Vista, сценарии, доступные только вам Чт��ы д��авить вашу �а��у �ценариев в PATH т�ль�� дл� вашей учетн�й �а�и�и, вы��лните �ледующие дей�тви�: 1. Щел�ните на Пуск (S�����Панель управления (Co���o� P�����Учетные записи пользователей и семейная безопасность (Us�� A��ou��s ��d F�m��y S����y� или Учетные записи (Us�� A��ou��s�. 2. В нижней ча�ти ��и��а �аданий вы�ерите �ун�т Изменение переменных среды (Ch��g� My ��v��o�m��� V����b��s�. 3. В верхней ча�ти диал���в��� ��на, е�ли та� уже е�ть �а�и�ь PATH, щел�ните на ней дважды. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�ите �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 4. Е�ли же в верхней ча�ти диал���в��� ��на �а�и�и PAT H нет, щел�ните на �н���е Создать (N�w�, на�ерите PATH в ��ле Имя переменной (V����b�� N�m�� и на�ерите c:\scripts в ��ле Значение переменной (V����b�� V��u��. 5. Щел�айте на �н���ах OK, чт��ы �а�рыть диал���вые ��на. Windows XP, сценарии, доступные всем пользователям Чт��ы д��авить вашу �а��у �ценариев в PATH дл� всех ��ль��вателей XP, вы��л� XP, вы��л� , вы��л� ните �ледующие дей�тви�: 1. В�йдите в �и�те�у �а� ад�ини�трат�р ����ьютера. 2. Щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й �ыши на �ун�те Мой компьютер (My Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. 3. Вы�ерите в�лад�у Дополнительно (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. 4. Найдите �а�и�ь PAT H в нижней ча�ти диал���в��� ��на и дважды щел�ните на эт�й �а�и�и. 5. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�ите �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 6. Щел�айте на �н���ах OK, чт��ы �а�рыть диал���вые ��на. Windows XP, сценарии, доступные только вам Чт��ы д��авить в XP вашу �а��у �ценариев в PATH т�ль�� дл� вашей учетн�й �а� �и�и, вы��лните �ледующие дей�тви�: 1. Щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й �ыши на �ун�те Мой компьютер (My Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. 2. Вы�ерите в�лад�у Дополнительно (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. 3. Дважды щел�ните на �а�и�и PATH в верхней ча�ти диал���в��� ��на, е�ли та�а� �а�и�ь та� е�ть. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�и�
Запуск своих собственных сценариев 59 те �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 4. Е�ли же в верхней ча�ти диал���в��� ��на �а�и�и PAT H нет, щел�ните на �н���е Создать (N�w�, на�ерите PATH в ��ле Имя переменной (V����b�� N�m�� и на�ерите c:\scripts в ��ле Значение переменной (V����b�� V��u��. 5. Щел�айте на �н���ах OK, чт��ы �а�рыть диал���вые ��на. П��ле на�тр�й�и ��и��а PATH, в�е чт� нужн� �удет �делать — эт� на�рать и�� лю���� и� ваших файл�в �ценариев в ��не ���андн�й �тр��и, или в ��ле Выпол- нить (Ru��, или в ��ле ��и��а. Чт��ы и��ытать эт� в ра��те, �т�р�йте н�в�е ��н� ���андн�й �тр��и, на�ерите firstscript и наж�ите Ввод. Ваш уче�ный �ценарий д�лжен �а�у�тить��. Запуск сценариев с помощью значка ярлыка Е�ли у ва� е�ть �ценарий, ре�ул�рн� �а�у��ающий�� � ����щью ws���p�, � �ред� ws���p�, � �ред� , � �ред� ла�аю ���дать �рлы� дл� файла �ценари�. ▼▼ Если ваши сценарии используются в локальной сети, я рекомендую хранить часто использу- емые сценарии в общей сетевой папке. Тогда можно будет создать ярлыки на любом сете- вом компьютере. При создании ярлыка введите путевое имя, соответствующее универсаль- ному соглашению об использовании имен — Universal Naming Convention (UNC), например \\bali\scripts\myscript.vbs. Можно также воспользоваться проводником, чтобы найти общий файл в папке Мое сетевое окружение (My Network Places). Будет также неплохо скопировать в общую папку сами ярлыки. После этого можно будет перетащить значки этих ярлыков на любой сетевой компьютер, не пересоздавая этот ярлык. Создание ярлыка сценария Знач�� �рлы�а ча�т� и���ль�уе�ых �ценариев ��жн� ���е�тить на Ра��чий �т�л, в �а��у, в �в�е �еню Пуск (S����� или на �анель �ы�тр��� �а�у��а. Н� эт� ��льше ��дх�дит дл� �ценариев, �а�у��ае�ых � ����щью ws���p� или тех �ценариев, �а�у� ws���p� или тех �ценариев, �а�у� или тех �ценариев, �а�у� ��ае�ых � ����щью s���p�s, ��т�рые не �енерируют вых�дн�й инф�р�ации. Е�ли �рлы� и���ль�ует�� � �s���p� (вер�и� ���андн�й �тр��и�, �а� т�ль�� вы��лнение �ценари� �авершит��, е�� ��н� �а�р�ет��, не ���в�л�� �р�читать ре�ультат. Дл� ���дани� �рлы�а дл� файла �ценари� вы��лните �ледующие дей�тви�: 1. Щел�ните �рав�й �н����й на Ра��че� �т�ле и вы�ерите �ун�т Создать (N�w�, Ярлык (Sho���u��. 2. Щел�ните на �н���е Обзор (��ows�� и найдите �в�й файл �ценари�. Наж�и� те OK. 3. Пере�е�тите у�а�атель �ур��ра в начал� ��л�. У�ажите ра���л�жение ��ъе�та (Lo����o�� и д��авьте �еред у�а�ание� �ути и и�ени файла ws���p�. Не �а�удьте ���тавить �р��ел ���ле ws���p�. Наж�ите Далее (N�x��. 4. И��ените ��и�ание � ws���p�.�x� на чт� �ни�удь ��лее ��дх�д�щее, ��и�ываю� щее дей�твие �ценари�, на�ри�ер на Подсчет размеров файлов. Наж�ите Готово (F���sh�.
60 Глава 1. Windows Script Host П��ле эт��� ��жн� �еретащить эт�т �рлы� �уда у��дн�, в�люча� и ваше �еню Пуск (S�����, �анель �ы�тр��� �а�у��а или лю��е дру��е �е�т�. Дв�йн�й щелч�� на �нач�е �рлы�а �риведет � вы��лнению �ценари� � �ини�альны�и у�или��и. ▼▼ Можно перетащить на значок ярлыка сценария один или несколько значков файлов. Это при- ведет к выполнению сценария с полным путевым именем каждого файла, переданного сцена- рию в качестве аргумента. Этот прием можно использовать со сценариями, отправляющими электронную почту, выполняющими распечатку или выполняющими другие задачи, связанные с файлами. Запуск сценариев из пакетных файлов И на��нец, �ценарии ��жн� та�же �а�у��ать и� �а�етных файл�в. Эт� �вучит не���ль�� �транн�, н� та��й вариант т�же ��жет �ри��дить��. Па�етные файлы уд��ны, ���да нужн� вы�тр�ить не���ль�� �р��ра�� в ��ределенную ���лед�ва� тельн��ть и ничт� не �ре��т�твует т��у, чт� �дн�й и� этих �р��ра�� �удет файл �ценари�. Сетевы� ад�ини�трат�ра� W��dows та�же ��жет ��над��ить�� �а�у� W��dows та�же ��жет ��над��ить�� �а�у� та�же ��жет ��над��ить�� �а�у� ��ать �ценарии и� �а�етных файл�в в �аче�тве ча�ти �ценари� вх�да в �и�те�у, ��� т�рый �удет ра���атривать�� в �лаве 9 «И���ль��вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и». Дл� �а�у��а �ценари� и� �а�етн��� файла ��жн� и���ль��вать ли�� ws���p�, ли�� �s���p�. О�е вер�ии ���ут, �а� ���а�ан� в �ледующе� �ри�ере, в��вращать �а�етн��у файлу инф�р�ацию �� удачн�� или неудачн�� �авершении �ценари� ���ред�тв�� �ере�енн�й �реды errorlevel: badscript.vbs: Wscript.echo "К сожалению, возникла проблема." WScript.Quit(1) runbad.bat: @echo off wscript badscript.vbs echo Wscript вернул %errorlevel% if errorlevel 1 echo Сценарий выдал ошибку! ▼) В Интернете могут встретиться статьи, утверждающие, что Wscript не присваивает значение переменной среды errorlevel, но эти сведения устарели. Начиная с Windows 2000 версии Wscript и Cscript присваивают значение errorlevel в соответствии со сложившейся ситуацией. Автозапуск сценариев W��dows ��жн� �а�тавить �а�у��ать �ценарии в авт��атиче���� режи�е �ри вх�де в �и�те�у, вых�де и� нее, чере� �аранее �а�ланир�ванные интервалы или на ��н�ве дру�их �и�те�ных ���ытий. Инф�р�аци� �� авт��атиче����у �а�у��у �ценариев дает�� в �лаве 9.
Проблемы безопасности 61 Проблемы безопасности П����ль�у у W��dows е�ть и���ль�уе�а� �� у��лчанию �ценари��и и WSH идентифи�аци� ти�а файла �� ра�ширению е�� и�ени (на�ри�ер, .vbs и .js�, ���да �т W��dows тре�ует�� «�а�у�тить» или «�т�рыть» V�S�файл, �на �нает, чт� эт� �ценарий, и �а�у��ает е��. Эт� у�р�щает и���ль��вание �ценариев, н� ��жет та�же �ред�тавл�ть ри�� � т�ч�и �рени� �е���а�н��ти. Дл� и��енени� ��ведени� �� у��лчанию ��жн� на� �вать две �ричины: y П����ль�у �ценарии ���ут ���давать�� дл� удалени� файл�в и вне�ени� �е� рье�ных и��енений в на�тр�й�и ��ераци�нн�й �и�те�ы, та��й у�р�щенный �а�у�� �ценариев на ваше� ����ьютере ��жн� ���читать �лиш��� �ерье�н�й ��а�н��тью. y Зл�у�ышленни�и и���ль�уют ��т�вн��ть W��dows � �а�у��у �ценариев, ���� W��dows � �а�у��у �ценариев, ���� � �а�у��у �ценариев, ���� дава� �ценарии�виру�ы и �ценарии�черви и ра��ыла� их в �аче�тве вл�жений � ����щени�� эле�тр�нн�й ��чты. Е�ли ��лучатель ��чты �т�рывает вл�жение, а W��dows на�тр�ена на авт��атиче��ий �а�у�� V�S�файл�в � WSH, виру� �ри�ту�ает � �в�ей ра�рушительн�й ра��те. П����ль�у �ценарии в�е�да ��жн� �а�у��ать �уте� �вн��� на��ра ���анды ws���p� или �s���p�, и �����ль�у ��жн� в �вн�� виде ���тавить �л�в� ws���p� или �л�в� �s���p� �еред и�ене� файла �ценари� в ��ле Объект (T��g��� лю���� �рлы�а, �удет �е���а�нее �т�лючить и�еющее�� в W��dows �����тавление файла� �цена� риев х��та WSH, и �ри эт�� ни�а�ие �уще�твенные фун�ци�нальные в����жн��ти не �удут утрачены. Чт��ы �делать эт� в W��dows 7 или V�s��, вы��лните �ледующие дей�тви�: 1. Щел�ните на Пуск (S�����, Панель управления (Co���o� P�����. Щел�ните на �е� лен�й над�и�и Программы по умолчанию (P�og��ms�; �ате�, ��д �ун�т�� Задание используемых по умолчанию программ (D���u�� P�og��ms�, вы�ерите Сопоставление типов файлов или протоколов конкретным программам (M�k� A F��� Typ� A�w�ys Op�� I� A Sp������ P�og��m�. 2. Найдите в ��и��е .vbs. Вы�ерите эт�т эле�ент и щел�ните на �н���е Изменить программу (Ch��g� P�og��m�. 3. Щел�ните на �н���е Обзор (��ows��, а �ате� на�ерите \windows\system32\notepad.exe 4. Щел�ните на �н���е Открыть (Op���, а �ате� наж�ите OK. 5. П�вт�рите в�е �редыдущие дей�тви� дл� ти��в файл�в .vb�, .js, .js� и .wsh. При ра��те в W��dows XP вы��лните �ледующие дей�тви�: 1. От�р�йте W��dows �xp�o��� и вы�ерите Сервис (Too�s�, Свойства папки (Fo�d�� Op��o�s�. 2. Вы�ерите в�лад�у Типы файлов (F��� Typ�s�. 3. Найдите эле�ент VBS в ��и��е ��д �а��л�в��� Расширения (�x���s�o�s� и вы� �ерите эт� эле�ент.
62 Глава 1. Windows Script Host 4. Щел�ните на �н���е Дополнительно (Adv����d� и ��д �а��л�в��� Действия (A���o�s� вы�ерите эле�ент Открыть (Op���. 5. Щел�ните на �н���е Изменить (�d���. От�ените и�еющую�� на�тр�й�у (��т�ра� и�еет �ледующий вид C:\WINDOWS\Sys��m32\WS���p�.�x� «%1» %*� и и�� �ените �а�и�ь на �ледующую: notepad "%1" 6. Щел�ните на �н���ах OK, чт��ы �а�рыть ��а диал���вых ��на. 7. Найдите эле�ент JS в ��и��е Расширения (�x���s�o�s� и ��вт�рите дей�тви� 4 и 5. П��ле эт��� вы ���жете �а�етить, чт� ваши и��енени� авт��атиче��и �ыли �ри�енены � файла� JS� и WSF. Те�ерь вы уже не ���жете �а�у�тить файл �ценари� на вы��лнение щелч��� �рав�й �н���и или дв�йны� щелч��� �� е�� �нач�у. В�е�т� эт��� вы��лните �дн� и� �ледующих дей�твий: y y С��дайте �рлы� � ws���p� или �s���p� в ��ле Объект (T��g���, �а� ра���а�ывал��ь ранее в данн�й �лаве. (П��ле ���дани� �рлы�а дл� файла �ценари� щел�ните на не� �рав�й �н����й �ыши, вы�ерите �ун�т Свойства (P�op�����s�, ���тавьте у�а� �атель �ур��ра �еред и�ене� файла в ��ле Объект (T��g��� и на�ерите wscript � �р��ел�� ���ле эт��� �л�ва.� y y За�у�тите �ценарии и� ��на ���андн�й �тр��и или и� ��на Выполнить (Ru�� ��д �н����й Пуск (S�����, на�рав wscript или cscript и и�� файла �ценари�. Н� эти �еры �е���а�н��ти не �тличают�� �����й �тр����тью. Е�ли вред�н��н�� �у �ценарию уда�т�� �ыть �а�ущенны� и�н�риру� в�е эти и��енени�, �н в�е равн� вы��лнит �аду�анн�е. Не��т�рые ��ль��ватели �ах�д�т та� дале��, чт� удал�ют файлы �s���p�.�x� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� �s���p�.�x� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� . �x� и ws ���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� �x� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� . �x� �� �в� их �� � �ью тер�в или, �� �райней �ере, �ере� �x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� и�ен�вывают их в цел�х �е���а�н��ти. Политика доверия и подписывание сценариев Дл� ��ль��вателей W��dows 7, V�s�� и XP в д��енн�й �ети W��dows (т� е�ть в �ети, у�равл�е��й W��dows S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� W��dows S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� � е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� щени� �а�у��а неавт�ри��ванных �ценариев. Чере� �в�й�тв� �етев�й �ру���в�й ��� лити�и ��ераци�нна� �и�те�а W��dows ��жет �ыть на�тр�ена на �а�у�� �ценариев, нах�д�щих�� в у�а�анных �атал��ах и (или� на �а�рещение �а�у��а �ценариев, не ��держащих д��у�ти��й подписи, �ред�тавл�ющей ����й �л�� �а��дир�ванных данных, �арантирующих ��лучение файла �ценари� и� авт�ри��ванных, надеж� ных и�т�чни��в. Эту авт�ри�ацию, на�ывае�ую управлением политикой доверия, д�лжен �ред��тавл�ть ад�ини�трат�р �ети. ▼) Если сетевой администратор активирует свойство политики доверия, вы можете лишиться воз- можности создавать и выполнять свои собственные сценарии! Если у вас возникли трудности с запуском сценариев, обратитесь к сетевому администратору. Б�лее ��др��н� в��р��ы �е���а�н��ти �ценариев, ��лити�а д�вери� и и���ль� ��вание ��д�и�и �ценариев ра���атривают�� в �лаве 9.
Отладка сценариев 63 Отладка сценариев Даже на�и�ание �р��ра��ы ��жет �ыть дел�� ве�ь�а не�р��ты�, н� д�ведение ее ра��че�� ���т��ни� ��жет выве�ти и� тер�ени� ���� у��дн�. К �ча�тью, �и�те�а ���дани� �ценариев W��dows ���тавл�ет�� � �рафиче��и� �тладчи���, ���в�л�ю� W��dows ���тавл�ет�� � �рафиче��и� �тладчи���, ���в�л�ю� ���тавл�ет�� � �рафиче��и� �тладчи���, ���в�л�ю� щи� увидеть, чт� тв�рит�� внутри �р��ра��ы��ценари� �ри ее вы��лнении. Е�ли ва� �рих�дил��ь ���давать и �тлаживать �а�р��ы в Wo�d, �x���, A���ss или �а���� ни�удь дру��� �рил�жении M���oso��, вы, наверн�е, уже �на���ы � ви�уальны� �тладчи���. Е�ли же нет, ва� �редла�ает�� �рат�ий тур �� е�� и���ль��ванию. Е�ли �ценарий �т�л�нет�� � �ру��й �р��ра��н�й �ши���й (на�ри�ер, � �а��� т�й, ���тавленн�й не в т�� �е�те, или � нера����навае�ы� �л�в���, WSH выдает ����щение �� �ши��е. Ра����три�, � �ри�еру, �ценарий, и�еющий �ерье�ную �ши��у: 'bad.vbs – сценарий, нуждающийся в отладке forcounter=1to3 wscript.echo "Значение счетчика теперь равно", counter next badcommand wscript.echo "Строка, следующая за плохим оператором" V�S���p� не ра����нает �л�в� badcommand. В�е, чт� �р�и�х�дит �ри ���ыт�е �а�у��а эт��� �ценари�, �ави�ит �т и���ль�уе���� х��та. Cs���p� выв�дит ����щение �� �ши��е � ��и�ание� �р��ле�ы и ���а�ывает, �а�а� �тр��а файла ��держит �ши��у: Значение счетчика теперь равно 1 Значение счетчика теперь равно 2 Значение счетчика теперь равно 3 C:\scripts\bad.vbs(6, 1) Ошибка выполнения Microsoft VBScript: Несоответствие типа: 'badcommand' Ws���p�, �рафиче��а� вер�и�, �ре�ращает вы��лнение и выв�дит диал���в�е ��н� � инф�р�ацией �� �ши��е, ���а�анн�е на ри�. 1 .6 . Рис. 1 .6. WScript, встретившись с программной ошибкой, выводит диалоговое окно В лю��� �лучае ����щение �� �ши��е ��держит инф�р�ацию � т��, чт� х��т WSH �т�л�нул�� � ��ределенн�й �р��ле��й в �тр��е 6 ваше�� файла �ценари�,
64 Глава 1. Windows Script Host и в� �н��их �луча�х эт� ��дв�дит ва� д��тат�чн� �ли��� � и�т�чни�у �р��ле�ы, ��т�рую ��жн� ��наружить и у�транить. ▼▼ При редактировании и отладке сценариев полезно будет иметь такой текстовый редактор, ко- торый может переместить курсор непосредственно на строку с указанным номером, упомяну- том в сообщении об ошибке сценария. Блокнот способен на это, если применить следующий прием: щелкнуть на меню Формат (Format) и снять флажок Перенос по словам (Word Wrap). Теперь, после нажатия комбинации Ctrl+G, можно перейти на строку с указанным номером. Для этого нужно набрать номер строки и нажать Ввод. Е�ли �ценарий ведет �е�� не�жиданны� ��ра��� и в не� нет �ру�ых ��ечат�� — �� �райней �ере тех, ��т�рые ���ут �ыть ��наружены интер�ретат�р�� и���ль�у� е���� ��ы�а �ценариев, — ва� �ридет�� �р�ве�ти не��льш�е ра��лед�вание. В не��т�рых �луча�х ��ле�н� �удет в�тавить ��ерат�ры, выв�д�щие ��дер� жи��е ваших �р��ра��ных �ере�енных и �р��ежут�чных ре�ультат�в, чт��ы �����треть, в�е ли � ни�и в ��р�д�е. На�ри�ер, в �ценарии bad.vbs, � ��т�ры� уже �рих�дил��ь ра��тать в данн�� ра�деле, �ыла �р��ра��а, выв�д�ща� ��держи��е �ере�енн�й counter �� �ере т���, �а� ци�л �ен�л ее �начение. Ин��да та�а� ра�� н�видн��ть выв�да инф�р�ации, на�ывае�а� тра��ир�в��й, ��жет �ри��дить��. Д���лнительный ��ерат�р echo или дру��й ��ерат�р выв�да в�е�да ��жн� удалить, �а� т�ль�� �танет ��н�тн�, чт� �ценарий �ара��тал д�лжны ��ра���. Эта техн�л��и� в��лне ра��т�������на, н� �на �ришла � на� и� дале�их 1960�х ��д�в. Н� те�ерь�т� уже не ве� �ерф��арт? Е�ли ваш �ценарий ведет �е�� не�ред��а�уе�� или е�ли вы нах�дите�ь на �ерв�начальн�� эта�е е�� ���дани� и х�тите �����треть, чт� �р�и�х�дит внутри � целью у�едить��, чт� �н ра��тает, дл� эт��� е�ть на�н��� ��лее ��вре�енн�е �ред�тв�, ��т�р�е ��жн� и���ль��вать дл� и�учени� внутренне�� ���т��ни� �ценари� в �р�це��е е�� вы��лнени�. Эт� �ред�тв� на�ывает�� �тладчи��� �ценариев — S���p� D�bugg��. Н� е�� нужн� �а� �ру�ить �а���т��тельн�, �����ль�у �н� не ���тавл�ет�� в�е�те � W��dows. Е�ли вы ���ираете�ь ра�ра�атывать �ценарии, �ерейдите на ве���айт www.microsoft.com, найдите на не� �а�ру��у Windows Script Debugger, вы�ерите Script Debugger for Windows NT 4.0 and Later, ���ле че�� �а�ру�ите и у�тан�вите �р��ра��у. (Дл� у�тан�в�и �а� �руженн�й �р��ра��ы на XP нужн� в�йти в �и�те�у в �аче�тве Ад�ини�трат�ра ����ьютера.� ▼) Если у вас уже установлен пакет Microsoft Visual Studio, .NET Studio или InterDev или активи- Microsoft Visual Studio, .NET Studio или InterDev или активи- Visual Studio, .NET Studio или InterDev или активи- Visual Studio, .NET Studio или InterDev или активи- Studio, .NET Studio или InterDev или активи- Studio, .NET Studio или InterDev или активи- , .NET Studio или InterDev или активи- NET Studio или InterDev или активи- Studio или InterDev или активи- Studio или InterDev или активи- или InterDev или активи- InterDev или активи- или активи- рован какой-нибудь другой установленный отладчик, Windows Script Debugger можно не за- Windows Script Debugger можно не за- Script Debugger можно не за- Script Debugger можно не за- Debugger можно не за- Debugger можно не за- можно не за- гружать, вам уже может быть доступен более мощный отладчик. Чтобы проверить его наличие, создайте небольшой сценарий по имени test.vbs. Он может содержать только один оператор, например x = 3. Затем наберите следующую команду: cscript //D //X test.vbs и нажмите Ввод. Если появится окно отладки (или диалоговое окно, позволяющее вам выбрать отладчик), мож- но работать дальше, используя уже установленный отладчик. Если окно отладчика не появится и не будет выведено никакое другое диалоговое окно, тогда придется все же загрузить Micro- Micro- soft Script Debugger и продолжить изучение оставшегося материала данного раздела с этим отладчиком.
Отладка сценариев 65 П��ле у�тан�в�и �тладчи�а �ценариев дл� �а�у��а �ценари� � и���ль��вание� �тладчи�а ��жн� в����ль��вать�� �люч�� //X в ���андн�й �тр��е �а�у��а. Те�ерь ���анда cscript //X с:\scripts\bad.vbs �риведет � ���влению ��на �тладчи�а, ���а�анн��� на ри�. 1.7 . Рис. 1.7 . Windows Script Debugger выводит содержимое вашего сценария по мере его выполнения П� �ере вы��лнени� �ценари� желтый у�а�атель �удет у�а�ывать на �леду� ющий вы��лн�е�ый ��ерат�р �ценари�. П����ль�у на ри�. 1.7 �ценарий т�ль�� чт� �а�ущен, у�а�атель нах�дит�� на �ерв�� вы��лн�е��� ��ерат�ре �ценари�, ��т�рый нах�дит�� �ра�у ���ле ����ентари�. Те�ерь �ценарий ��жн� вы��лн�ть в ��ша��в�� режи�е или е�у ��жн� ра�ре� шить вы��лнить�� д� желае��й т�ч�и и ��тан�вить��. Х�т� дл� эт��� ��жн� в��� ��ль��вать�� �еню �тладчи�а, �р�ще в�е же �удет и�учить ���ращенные ���анды �лавиатуры или �лавиши �ы�тр��� вы��ва. Наи��лее важные и� них ���а�аны в та�л. 1.5. Таблица 1.5. Клавиши быстрого вызова отладчика Windows Script Debugger Клавиша Действие F� За�у�� �ценари� на �дин �ледующий ша� �ри ��ша��в�� вы��лнении. Е�ли �ценарий вы�ывает ��д�р��ра��у �ценари� или фун�цию, �тлад� чи� «�ах�дит» в ��д�р��ра��у и ��танавливает�� на ее �ерв�й �тр��е Sh���+F� Дей�твует та� же, �а� и F�, н� «�ере�ту�ает» чере� ��д�р��ра��ы или фун�ции F9 При щелч�е �� лю��й �тр��е �ценари� и нажатии F9 в эт�й �тр��е у�танавливает�� или � нее �ни�ает�� та� на�ывае�а� контрольная точ ка (т�ч�а ��тан�ва�. Пр���н �р��ра��ы ��танавливает��, �а� т�ль�� в�третит�� ���еченна� ��нтр�льн�й т�ч��й �тр��а. Эти� ��жн� в��� ��ль��вать��, е�ли нужн� �����треть, чт� �лучил��ь в ��н�ретн�й т�ч�е �р��ра��ы и не х�чет�� д�л�� и нудн� ���тр�чн� д��ирать�� д� эт�й т�ч�и. Дл� эт��� нужн� у�тан�вить ��нтр�льную т�ч�у и нажать F5 продолжение
66 Глава 1. Windows Script Host Клавиша Действие F5 П��в�л�ет �р��ра��е вы��лн�ть�� на ��лн�й ���р��ти, ���а �на не �а� ��нчит��, �т�л�нувши�ь � �ерье�н�й �ши���й, или ���а ей не в�третит�� ��нтр�льна� т�ч�а C���+Sh���+F� Е�ли вы��лнение �р��ра��ы д�шл� д� вх�да в ��д�р��ра��у или фун�� цию, �ценарий вы��лн�ет�� д� тех ��р, ���а не �р�и��йдет в��врат и� ��д�р��ра��ы, ���ле че�� вы��лнение ��танавливает�� Просмотр и изменение значений переменных Отладчи� ���в�л�ет не т�ль�� вы��лн�ть �р��ра��у в ��ша��в�� режи�е, н� и �р���атривать и и��ен�ть ��держи��е �ере�енных внутри �ценари�. Эт� е�� �а��е ��ле�н�е �в�й�тв�. Щел�ните на �ун�тах �еню View (Вид�, Command Window (К��андн�е ��н��, чт��ы �т��ра�ил��ь ��н�, ���а�анн�е на ри�. 1 .� . К��андн�е ��н� ���в�л�ет вы��лн�ть три дей�тви�, �����ающие �тладить вашу �р��ра��у: y y М�жн� выве�ти �начение лю��й �ере�енн�й, на�рав в��р��ительный �на�, ���ле не�� и�� �ере�енн�й и нажав Ввод. На ри�. 1 .� �ыл� �а�р�шен� �начение �ере�енн�й num, и �тладчи� вывел 1. Рис. 1 .8 . Окно Command window позволяет просматривать и изменять значения переменных, а также выполнять вручную операторы программы. Окно стека вызовов — Call Stack, показывает порядок, в котором были вызваны подпрограммы и функции y y М�жн� и��енить �начение �ере�енн�й, на�рав ��ерат�р �ри�ваивани�, �а� ���а�ан� на ри�. 1 .�, �де и��ен�ет�� �начение �ере�енн�й num � 1 на 4. Эт�й в����жн��тью ��жн� в����ль��вать��, чт��ы ���йти �ши��у, д��ущенную �ценарие�, е�ли нужн� �р�д�лжить �тлад�у. Х�т� �а���т��тельн� и��енить Таблица 1.5 (продолжение)
Отладка сценариев 67 �р��ра��у, ���а идет �тлад�а, нев����жн�, �уте� и��равлени� �начени� �ере� �енных вы ��лучаете и� �еан�а �тлад�и д���лнительную инф�р�ацию и �р�� д�лжаете �тлад�у �р��ра��ы. y y М�жн� вы�вать лю�ую ��д�р��ра��у, фун�цию, �ет�д ��ъе�та или �в�й�тв�, на�рав ���твет�твующий ��ерат�р �р��ра��ы. Дл� вы��ва и �т��ражени� �на� чений фун�ции нужн� в����ль��вать�� в��р��ительны� �на��� (?�, на�ри�ер ? mid("ABC",2). Дл� вы��ва ��д�р��ра�� нужн� на�рать и�� ��д�р��ра��ы и �начени� лю�ых ар�у�ент�в. На ри�. 1.� вы�ывает�� ��д�р��ра��а shownumber � ар�у�ент�� num = 15. Просмотр окна стека вызовов — Call Stack О�н� C��� S���k, та�же ���а�анн�е на ри�. 1.�, — еще �дн� �ред�тв�, �����ающее �т�леживать внутреннюю ра��ту �ценари�. Дл� �т��ражени� эт��� ��на вы�ери� те �ун�ты �еню View (Вид�, Call Stack (Сте� вы��в�в�. Эт� ��н� выв�дит ��и��� и�ен лю�ых ��д�р��ра�� и фун�ций, и���ль�ующих�� в те�ущий ���ент вре� �ени. В верхней ча�ти ��и��а выв�дит�� и�� те�ущей ��д�р��ра��ы, �а ней �ле� дует и�� вы�вавшей ее ��д�р��ра��ы и та� далее, д� и�ени ��н�вн�й �р��ра��ы �ценари�. Пр����тр �те�а вы��в�в ����жет �ри �тлад�е �ценариев, вы�ывающих �н��� ��д�р��ра�� или и���ль�ующих ре�ур�ию. В�е эт� �тн��ит�� � техн�л��ии �р�� �ра��ир�вани�, ра���атривае��й в �лаве 4. М�жн� дважды щел�нуть на лю��й �а�и�и в ��не �те�а вы��в�в (C��� S���k�, и �тладчи� ���ажет т� �е�т� в ваше� �ценарии, �т�уда �ыла вы�вана нах�д�ща��� в ра��те ��д�р��ра��а. Эт� �ред�тв� �����ает уд��т�верить�� в т��, чт� �ценарий �р�х�дит чере� в�е �редна�наченные дл� не�� �� ваше�у �нению эта�ы, н� е�ли вы �ривы�ли � ��лн�фун�ци�нальны� �тладчи�а�, и�еющи��� в дру�их �р�ду�тах M���oso��, т� увидите, чт� у эт��� �тладчи�а �т�ут�твуют три важные фун�ции: y Нель�� вы�рать «�ледующий ��ерат�р дл� вы��лнени�», чт��ы и��енить и�е� ющий�� ��р�д�� вы��лнени� ��ерат�р�в (на�ри�ер, дл� ��х�да �р��ле�н�й ��ла�ти�. y Е�ли �ценарий �т�л�нет�� � �ерье�н�й �ши���й, �н, �а� ��ычн�, выв�дит ����� щение �� �ши��е и ��танавливает��. О��йти �р��ле�у в �тладчи�е нев����жн�. y Нель�� �треда�тир�вать �ценарий и �ри�а�ать �тладчи�у �ере�а�у�тить��. Нужн� выйти и� �тладчи�а и �а�у�тить е�� �н�ва. Ну, а че�� же вы �жидали �т �е��латн��� �р�ду�та? И в�е же, ���да нужн� и�� учить ��ведение �ценари� и�нутри, эт� �ред�тв� ��ле�н� держать ��д ру��й. ▼▼ Если вы помещаете в сценарий отладочные операторы вывода для отображения значений переменных, добившись работоспособности сценария, не удаляйте эти операторы, а закоммен- тируйте их. Тогда можно будет легко восстановить их, если позже придется снова заниматься отладкой сценария. Если у вас есть копия установленных программ Microsoft Word или Excel, можно разрабатывать сценарии, используя встроенную среду Visual Basic for Applications. Ее можно вызвать из строки меню, щелкнув на пунктах Разработчик (Tools), Visual Basic. Здесь вы не получите доступ к объ- Tools), Visual Basic. Здесь вы не получите доступ к объ- ), Visual Basic. Здесь вы не получите доступ к объ- Visual Basic. Здесь вы не получите доступ к объ- Basic. Здесь вы не получите доступ к объ- Basic. Здесь вы не получите доступ к объ- . Здесь вы не получите доступ к объ- екту WScript, но сможете отработать другие составляющие своего сценария в более мощной среде отладки и тестирования.
68 Глава 1. Windows Script Host ▼▼ Многие языки сценариев предоставляют специальные операторы, при встрече с которыми ак- тивизируется отладчик и останавливается выполнение сценария. В VBScript эту роль играет оператор stop. В Jscript для этого используется оператор debugger. Этот оператор работает как контрольная точка, за исключением того, что он встроен непосредственно в ваш сцена- рий и особенно удобен при отладке WSC-сценариев, предназначенных для создания объектов, которые можно будет применять в сценариях. Этот вопрос рассматривается в приложении G, которое может быть загружено с веб-сайта www.helpwin7. com/scripting. Где можно получить дополнительную информацию В Интернете ��держит�� �а��а инф�р�ации � �ценари�х. В ча�тн��ти, в��лне вер��тн�, чт� дл� лю����, �аду�анн��� ва�и �адани�, �редна�наченн��� дл� реше� ни� � ����щью �ценари�, найдет�� уже ���данный �ценарий, ��т�рый вы��лн�ет ��н�вную е�� ча�ть или в�е �адание цели���. Зна� �� эт��, вы ��жете �р����треть ве���айты, �еречи�ленные в та�л. 1 .6 . Таблица 1.6. Веб-ресурсы для Windows Script Host Веб-сайт или новостная группа Описание ���h���.m���oso��.�om�s���p������� Наи��лее ��лный и�т�чни� инф�р�ации дл� WSH в M���oso�� T��h��� S���p� C�����. В�люча� в M���oso�� T��h��� S���p� C�����. В�люча� M���oso�� T��h��� S���p� C�����. В�люча� T��h��� S���p� C�����. В�люча� T��h��� S���p� C�����. В�люча� S���p� C�����. В�люча� S���p� C�����. В�люча� C�����. В�люча� C�����. В�люча� . В�люча� ет ��др��ную д��у�ентацию, уче�н�е �����ие и �ри�еры www.h��pw��7.�om�s���p���g Ве���айт, � ��т�р��� ��жн� �а�ру�ить уче�ные �ценарии, �рив�ди�ые в данн�й �ни�е www.m���oso��.pub���.s���p���g.wsh М�жн� �р����треть и эт�т ве���айт, на ��т�р�� дают�� ра�личные и��равлени� и ��веты www.m���oso��.pub���.s���p���g.vbs���p� О�ще�твенна� н�в��тна� �ру��а, х��тин� дл� ��т�р�й �ред��тавл�ет�� ����анией M���oso��. В��лне ��дх�д�щее �е�т� дл� д��ычи инф�р�а� ции �� иде�х �� ���данию �ценариев и �у�ли�а� ции лю�ых, и�еющих�� у ва� в��р���в. Х�т� �де�ь ва� вр�д ли �удет дан �т�ыв или �ред��тавлена техниче��а� ��ддерж�а �� �т�р�ны ��трудни��в M���oso��, н� ���етители эт��� ����ще�тва ���ут ����дей�тв�вать ва�, �тветив на в��р�� или дав ��ле�ный ��вет Е�ли вы ��наружите �а�ие�ни�удь дру�ие ��ле�ные и�т�чни�и инф�р�ации, �а�ающие�� ���дани� �ценариев, дайте �не �нать, чер�нув �ару �тр�� в ���тевую �ни�у �� адре�у www.helpwin7.com/scripting.
Руководство по VBScript Ваше�у вни�анию �редла�ает�� введение в ��ы� �р��ра��ир�вани� V�S���p�. y Зде�ь вы ���на���ите�ь � ��н�ва�и �р��ра��ир�вани�. Е�ли у ва� уже е�ть ��ыт �р��ра��ир�вани�, т� �р��ра��ир�ванию на V�S���p� ��жн� научить�� д�в�льн� �ы�тр�. y Е�ли ва� раньше не �рих�дил��ь �ани�ать�� �р��ра��ир�вание�, не �т�ит ���рчать�� и���а т���, чт� те�а ва� не��н�тна. И�учите �ри�еры и �р�д�лжайте чтение. С� вре�ене� в�е �танет на �в�и �е�та. y Е�ли вы уже �на���ы � дру�и� ��ы��� �ценариев и ва� не нужн� и���ль��вать V�S���p�, � ни� в�е же �ледует ��на���ить��, чт��ы ра���рать�� в �ри�ерах, �рив�ди�ых в данн�й �ни�е. Введение в VBScript V�S���p� �вл�ет�� �в���дн� ра��р��тран�е��й вер�ией ра�ра��танн��� ����анией M���oso�� ��ы�а �р��ра��ир�вани� V�su�� ��s��, ���тавл�е��й в�е�те � W��dows S���p� Hos� (WSH�. Он �ра�тиче��и идентичен ��ы�у V�su�� ��s�� дл� �рил�же� V�su�� ��s�� дл� �рил�же� ��s�� дл� �рил�же� ��s�� дл� �рил�же� дл� �рил�же� ний (V�su�� ��s�� �o� App������o�s�, в�тр�енн��у в� �н��ие �рил�жени� M���oso�� дл� и���ль��вани� в �аче�тве ��ы�а �ценариев и �а�р���в. Не���тр� на т� чт� V�S���p� �вл�ет�� не���ль�� ��ле�ченн�й вер�ией ��ы�а V�su�� ��s��, �н ��ла� V�su�� ��s��, �н ��ла� ��s��, �н ��ла� ��s��, �н ��ла� , �н ��ла� дает в�е�и вычи�лительны�и в����жн��т��и, ��лн�ценн� ра��тает � и�ена�и файл�в и дата�и и ��жет ра��тать � внешни�и ��ъе�та�и. Х�т� �н не в ���т��нии выв�дить �л�жные диал���вые ��на и �еню, д��ту�ные ��лн�ценн��у W��dows� �рил�жению, �н в��лне ��равл�ет�� � �ред��тавление� ва� ����щи в у�равлении ����ьютер�� и авт��ати�ацией ��в�едневных �адач. Х�т� дл� на�и�ани� �ценари� ев ��жн� и���ль��вать �н�же�тв� дру�их ��ы��в, V�S���p� �удет �а�ечательны� вы��р��, �����ль�у ��ыт ра��ты � ни� ��жн� �удет �ерен��ить и� на�и�ани� �а�р���в и �р��ра�� дл� Wo�d и �x��� на ���дание �ценариев дл� W��dows, и на� Wo�d и �x��� на ���дание �ценариев дл� W��dows, и на� и �x��� на ���дание �ценариев дл� W��dows, и на� �x��� на ���дание �ценариев дл� W��dows, и на� на ���дание �ценариев дл� W��dows, и на� W��dows, и на� и на� ���р�т. В эт�й �лаве �ред�тавлен� введение в V�S���p� и ���а�аны е�� наи��лее важные �в�й�тва. Пред��ла�ает��, чт� вы х�т� �ы не�н��� �на���ы � �р��ра��ир�вание�. 2
70 Глава 2. Руководство по VBScript К�нце�ции �р��ра��ир�вани� �ал� в че� и��ен�ют�� �ри �ерех�де � �дн��� ��ы� �а на дру��й, ��эт��у е�ли и�еет�� ��ыт ра��ты � любым другим ����ьютерны� ��ы���, даже е�ли эт� �ыл �р��лушанный ���да�т� �ур� �� ���данию �а�р���в в Wo�d или �ур� �� Ф�ртрану � и���ль��вание� �ерф��арт в дале�их 1970�х ��� Wo�d или �ур� �� Ф�ртрану � и���ль��вание� �ерф��арт в дале�их 1970�х ��� или �ур� �� Ф�ртрану � и���ль��вание� �ерф��арт в дале�их 1970�х ��� дах, � ду�аю, чт� вы ��в�ите V�S���p� д�в�льн� �ы�тр�. О�ращайте вни�ание на иллю�трации, на�ывае�ые схемами. Они �ред�тавл�ют ����й �л��и ���тр�ени� �р��ра��, ��т�рые �удут и���ль��вать�� ва�и не�дн��ратн�. ▼) После чтения данной главы нужно посетить веб-сайт Microsoft TechNet по адресу www.microsoft. com/technet/scriptcenter. Это официальный сайт сценарных ресурсов. Там есть интерактивный справочник по самой последней версии VBScript, который можно просмотреть, следуя по пун- ктам Справочника по VBScript, расположенным в левой части страницы. На этом сайте имеются статьи, учебники, примеры сценариев и дополнительные средства, которые можно загрузить. Полноценный справочник по VBScript можно также загрузить с веб-сайта www.microsoft.com/ downloads, если задать на нем поиск по строке «Windows Script Documentation». Выберите за- грузку, включающую в заголовке номер версии, близкий к 5.6. Вы получите файл, который можно поместить на свой рабочий стол и просматривать по мере необходимости. Я вам насто- ятельно рекомендую это сделать! (Но с загрузкой, обозначенной как «Comprehensive JScript and VBScript Reference», лучше не связываться. Несмотря на многообещающее название, все это предназначено для использова- ния только из устаревшей версии Microsoft FrontPage.) При�еры �р��ра�� в данн�й �лаве д�в�льн� ла��ничны, �����ль�у �ни ра�� ра��таны дл� иллю�трации ��н�вных ��ерат�р�в и фун�ций V�S���p�. Б�лее ��ъе�ные �ри�еры �удут �рив�дить�� в �ледующих �лавах. ➔ Пр�вер�а ра��т�������н��ти �ценариев �� �ере их на�и�ани�, а та�же �а��� �т��тельн�е вне�ение в них и��енений в�ецел� �ривет�твует��. Ин�тру�ции �� �а�ру��е и и���ль��ванию уче�ных �ценариев даны на ве���транице www. helpwin7.com/scripting. Начне� � �ере�енных и ��н�тант. Переменные Переменные ��держат данные, ��т�рые нужн� ��ра��тать. Эти данные ���ут �ыть дата�и, ���а�ател��и вре�ени, чи�ла�и или �ери��и �р�и�в�льных �и�в�л�в (��т�рые ��ычн� на�ывают�� строками�. Стр��и �вл�ют�� наи��лее ра��р��тра� ненны� ти��� данных, � ��т�ры�и �рих�дит�� �тал�ивать�� — ваши �ценарии �удут, �а� �равил�, ра��тать � и�ена�и файл�в, людей, � ��держи�ы� файл�в и � дру��й ��д��н�й инф�р�ацией. Пере�енные хран�т�� в �а��ти ����ьютера и � ни� ��ращают�� �� имени. О�� ращение � �ере�енн�й �� и�ени ��уще�твл�ет�� дл� т���, чт��ы �����треть или и��енить ее �начение. Дл� �ри�ваивани� �ере�енн�й �начени� и���ль�ует�� �на� равен�тва (=�. Ра����три�, � �ри�еру, �ледующие �тр��и ��да V�S���p�: FullName = "Sue Smith" Age=40
Введение в VBScript 71 К��да интер�ретат�ру ��ы�а V�S���p� в�тречают�� эти ���анды, �н ��хран�ет �тр���в�е �начение "Sue Smith" в �ере�енн�й FullName, а цел�чи�ленн�е �наче� ние 40 — в �ере�енн�й Age. ▼) Хотя настоящее подробное рассмотрение этого вопроса отложено до главы 3 «Создание сце- нариев и работа с объектами», переменные могут также содержать объекты, представляющие собой блоки данных, управляемые программными дополнениями к VBScript. Именно объекты придают VBScript настоящую силу, поскольку они позволяют использовать возможности других системных программ по выполнению сложных задач, таких как отправка почтовых сообщений, запись файлов и установка принтеров на компьютер. На и�ена, ��т�рые ��жн� и���ль��вать дл� �ере�енных, на�ладывает�� р�д ��раничений: y И�ена д�лжны начинать�� � алфавитн��� �и�в�ла и ���ут ��держать т�ль�� �у�вы, цифры и �на� ��дчер�ивани� ( _ � . y y И�ена не ���ут ��держать внутренние �р��елы, т�ч�и или дру�ие �на�и �ун� �туации. На�ри�ер, и�ена big house и House.Big дл� �ере�енных не�рие�ле�ы. y И�ена �� длине не д�лжны �ревышать 255 �и�в�л�в. (Ут�чнение: данные ��раничени� ра��р��тран�ют�� т�ль�� на и�ена �ере�ен� ных, а не на инф�р�ацию, ��т�ра� ��жет в них ��держать��.� Инф�р�аци� ��жет �ыть ���ещена в �ере�енные не���ред�твенн� вашей �р�� �ра���й (�а� эт� �делан� в �ри�ере Age = 40�, �на ��жет �ыть �читана и� файл�в или ��жет �ыть и�влечена или вычи�лена на ��н�ве дру�их �ере�енных. В ��льшин�тве дру�их ��ы��в �р��ра��ир�вани� �еред и���ль��вание� �ере� �енных нужн� ��редел�ть ти� их данных, �удь т� �тр��а, цел�е чи�л�, ��ъе�т, дата или чт��ни�удь еще. Н� V�S���p� решает в��р�� ти�а �ере�енн�й �а���т��тельн�, у�р�ща� те� �а�ы� жи�нь �р��ра��и�та. В V�S���p� в�е �ере�енные �тн���т�� � �дн��у ��н�вн��у ти�у данных, ��т�рый на�ывает�� варьирующимся (v�������. Интер�ретат�р V�S���p� ��нвертирует данные и� �дн��� ти�а в дру��й �� �ере не��х�ди���ти. На�ри�ер, �ри ���ыт�е ��ъединени� �ере�енн�й, ��держащей �тр��у, � �ере�енн�й, ��держащей чи�л�, V�S���p� �ре��ра�ует чи�л� в е�� те��т�� в�е �ред�тавление, а �ате� ��ъедин�ет две �тр��и. Е�ли чи�л� �ри�авл�ет�� � дате, V�S���p� �ри�авл�ет � дате ��личе�тв� дней, равн�е эт��у чи�лу и т. д . Константы Неудивительн�, чт�, ���ла�н� ����ьютерн�й тер�ин�л��ии, чи�ла и �начени�, на�ранные в �р��ра��е литеральн� (�у�вальны� ��ра����, ���ут на�ывать�� ли тералами, н� чаще в�е�� их на�ывают константами. При�ер�� ��н�танты ��жет ���лужить чи�л� 40 и� �редыдуще�� �ри�ера. Он� на�ывает�� чи�л�в�й ��н�тан� т�й, �����ль�у ее �начение �вл�ет��... чи�л��. V�S���p� ���в�л�ет на�ирать четыре ти�а �начений ��н�тант: чи�л�вые (Num�����, �тр���вые (S����g�, даты (D���� и �улевы (�oo�����. В�т их �рат��е ��и�ание: y y Значени� чи�л�вых ��н�тант вв�д�т�� � и���ль��вание� цифр и, чт� не���� �ательн�, � и���ль��вание� де��тичн�й т�ч�и и (или� �на��в �лю� (+� или
72 Глава 2. Руководство по VBScript �ину� (-� . В �аче�тве �ри�ер�в ��жн� �риве�ти чи�л�вые ��н�танты 40, -20 и 3.14159. За��тые в длинных чи�лах ра��тавл�ть нель��, на�ри�ер �а�и�ь вида 1,234 и���ль��вать не ра�решает��. В�е�т� эт��� нужн� �а�и�ать 1234. y y Стр���вые ��н�танты вв�д�т�� �а� те��т�вые �и�в�лы, ���ещенные в �авыч�и (""�. М�жн� �риве�ти �ледующие �ри�еры: "ABC" и "Время настало". Е�ли нуж� н� ���е�тить �авыч�и внутри �тр��и, их �ледует удв�ить. На�ри�ер, ��н�танта, на�ранна� �а� "ABC""DEF", и�еет �начение ABC"DEF. y y Значени� даты вв�д�т�� � и���ль��вание� ф�р�ата W��dows, �ри�ен�е���� дл� вы�ранн�й ва�и л��али�ации (�траны�, и �а�лючают�� в �и�в�лы ре� шет�и. В США дл� у�а�ани� даты 3 �нвар� 2002 ��да ��жн� и���ль��вать �а�и�ь #1/3/2002#. В ��льшей ча�ти в�е�� ��тальн��� �ира та�а� �а�и�ь �удет �ред�тавл�ть дату 1 �арта 2002 ��да. (Чт��ы решить, �а� и�енн� нужн� ин� тер�ретир�вать ��н�танту даных та���� вида, V�S���p� и���ль�ует на�тр�й�и л��али�ации, ��т�рые �ыли �деланы в Панели управления W��dows в ра�деле Язык и региональные стандарты (R�g�o��� ��d L��gu�g� Op��o�s��. М�жн� та�же и���ль��вать длинные ф�р�аты данных. На�ри�ер, �дина��в� д��у�ти�ы #January 3, 2001# и #3 January, 2001#. Е�ли вы не в��ражаете �р�тив на��ра та�их ��н�тант, лучше и���ль��вать длинный ф�р�ат данных, �����ль�у �н ��лее �дн��начен, нежели �рат�ий ф�р�ат. Та�же учтите, чт� е�ли ��д у�а�ан дву�� цифра�и, V�S���p� интер�ретирует �а�и�и �т 00 д� 29 �а� �т 2000 и д� 2029, а �а�и�и �т 30 д� 99 �а� �т 1930 и д� 1999. Лучше в�е же у�а�ывать ��д ��лн��тью, чт��ы в�е �ыл� ��н� и ��н�тн� и ва�, и интер�ретат�ру V�S���p�. y y К�н�танты вре�ени д�лжны ��н�вывать�� на 24�ча��в�й ш�але или д�лжны в�лючать те��т, ут�чн�ющий вре�� д� и ���ле ��лудн� — AM или PM, �а� в #22:30:10# или в #10:30:10 PM#. y y Дату и вре�� ��жн� та�же ��ъедин�ть в �дн�й ��н�танте, �а� в �ледующе� �ри�ере: #January 3, 2001 22:30:10#. y y Булевы �начени� ���ут вв�дить�� в виде �л�в True и False. Поименованные константы Ин��да ���дают�� та�ие �ценарии, в ��т�рых литеральные �начени� и�рают ве�ь�а важную р�ль. На�ри�ер, в �ценарии, ��т�рый удал�ет в�е вре�енные файлы �тар� ше 30 дней, чи�л� 30 д�лжн� �де�т� фи�урир�вать, в����жн� даже в не���ль�их �е�тах. Эт� ��жет вы�л�деть �ледующи� ��ра���: for each file in folder if AgeOf(file) > 30 then file.Delete next Зде�ь в чи�ле 30 нет ниче�� не��ычн���, и у ва� ��жет ���вить�� желание на� �и�ать �ценарий та�и� ��ра���, чт��ы в���лед�твии ��жн� �ыл� и��енить �р�� хранени� �у��ра, не выи��ива� в�е ���влени� чи�ла «30» в эт�� файле �ценари�. М�жн� ���е�тить чи�л� 30 в �ере�енную, ��т�рую �ате� и���ль��вать �� в�е�у �ценарию:
Введение в VBScript 73 MaximumAge = 30 . . . for each file in folder if AgeOf(file) > MaximumAge then file.Delete next Преи�уще�тва �а�лючают�� в т��, чт� у�тан�вить �начение MaximumAge ��ж� н� т�ль�� �дин ра�, в �а��� начале �ценари�, и и���ль��вать �ере�енную ве�де �де эт� нужн�. Е�ли ��тре�ует�� и��енить �начение, �ридет�� �треда�тир�вать т�ль�� �ервый ��ерат�р. Кр��е т���, ��и�ен�ванные �начени� у�р�щают ��ни� �ание �ценари�, �ред��тавл�� �ведени� � ��держи���, че�� не делают чи�л�вые �начени�. Н� �ере�енные ���дают�� в�е же дл� т���, чт��ы �ен�ть �в�и �начени�, а эт� ��н�ретн�е �начение не �редна�начен� дл� и��енени� в �р�це��е вы��лнени� �ценари�. Ка� и ��льшин�тв� дру�их ��ы��в �р��ра��ир�вани�, V�S���p� �ред�� V�S���p� �ред�� �ред�� �тавл�ет в����жн��ть ��редел�ть поименованные константы, ��т�рые решают эту диле��у. В V�S���p� ��ерат�р const MaximumAge = 30 ��редел�ет �начение, на�ванн�е MaximumAge, ��т�р�е ��жн� и���ль��вать �� и�е� ни �� в�е�у ��тальн��у �ценарию и ��т�р�е равн� 30. Сл�в� const ��начает, чт� �начение не ��жет �ыть и��енен� �р��ра���й в� вре�� ее вы��лнени�. П�и�ен�� ванные ��н�танты ���ут �ыть ��ределены дл� лю�ых ранее ра����тренных ти��в �начений: даты, вре�ени, чи�ел и �тр��. При и���ль��вании ��и�ен�ванных ��н�тант в ваших �ценари�х вы �и�нали� �ируете лю���у, �т� читает �ценарий, � т��, чт� эт� �начение и�рает важную р�ль и не ��длежит и��енению, и вы и�вле�аете ��ль�у и� т���, чт� та�а� ��н�танта ��ределена в �дн�� �е�те, а и���ль�ует�� �ра�у в не���ль�их �е�тах. Лучше в�е�� ��ределить в�е ��н�танты, и���ль�уе�ые в ваших �ценари�х в �а��� начале файла �ценари�, чт��ы их �ыл� ле�че найти. ▼) Слово «константа» часто используется для описания как литералов, таких как 30, так и по- именованных констант, таких как MaximumAge. Это вносит небольшую путаницу, но именно так это формулируется в документации по VBScript, разработанной Microsoft, и в сообщениях об ошибках, выдаваемых интерпретатором этого языка. При �а�у��е ваше�� �ценари� в не� уже и�еет�� не���ль�� ��н�тант, ��реде� ленных интер�ретат�р�� V�S���p�. На�ри�ер, эт� ��н�танты vbMonday, vbTuesday и т. д ., ��т�рые �ред�тавл�ют дни недели. Их ��жн� и���ль��вать �ри ра��те �� �начени��и даты и вре�ени. Не��т�рые и� этих �ред��ределенных ��н�тант �удут ра����трены в данн�й �лаве, а их ��лный �еречень ��жн� найти в у����нутых выше интера�тивных ��рав�чни�ах �� V�S���p�. П��ле и�учени� ��ределений �ере�енных и �начений ��жн� ра����треть, �а� � ни�и ��жн� ра��тать � ����щью ��ерат�р�в и выражений.
74 Глава 2. Руководство по VBScript Операторы и выражения Пере�енные V�S���p� ���ут ��ра�атывать�� � ����щью операторов дл� вы��лне� ни� �ате�атиче��их или �тр���вых ��ераций. На�ри�ер, ��ерат�р + ��ладывает чи�л�вые �ере�енные. Дл� вычи�лени� в��ра�та Сью С�ит в �ледующе� ��ду ��жн� в����ль��вать�� �ледующи� ��ерат�р�� V�S���p�: age = age+1 Эт� ��начает, чт� нужн� в��ть �ере�енную age, �ри�авить � ее �начению 1 и ��� хранить ре�ультат в т�й же �ере�енн�й age. При и���ль��вании � �ере�енны�и, ��держащи�и �тр���вые �начени�, ��е� рат�р + объединяет �тр��и (� ��нцу �дн�й �тр��и �ри��един�ет дру�ую �тр��у�. На�ри�ер, firstname = "Sue" lastname = "Smith" fullname = firstname + " " + lastname ��ъедин�ет "Sue", �р��ел (����наченный �авыч�а�и� и "Smith", а �ате� ��хран�ет ре�ультат (Sue Smith� в �ере�енн�й fullname. В �редыдуще� �ри�ере � та�же ���у на�и�ать та�ую �тр��у ��да: fullname = firstname & " " & lastname V�S���p� дает в����жн��ть и���ль��вать �и�в�л & в �аче�тве т�чн� та���� же ������а ��ъединени� �тр��. С� �тр��а�и ��ерат�ры & и + делают а���лютн� �ди� на��вые вещи, н� � т�ч�и �рени� х�р�ше�� �тил� �р��ра��ир�вани� ��ерат�р & ����н�ет дл� тех, �т� читает вашу �р��ра��у, чт� ��ладывают�� �тр��и, а не чи�ла. Кр��е эт���, ��ерат�р & ��ладает еще �дни� �реи�уще�тв��: �н ��жет и���ль��� вать�� � �ере�енны�и и выражени��и лю���� ти�а. О�ерат�ры ��ру��ир�ваны в три �ате��рии: y Арифметические операторы — в�лючают +, -, * (у�н�жение� и / (деление�. y Операторы сравнения — на�ри�ер, > (��льше че�� и <= (�еньше че� или равн��. y Логические операторы — на�ри�ер, AND, OR и NOT. О�ерат�ры �равнени� и л��иче��ие ��ерат�ры выдают не чи�л�вые или �тр���� вые, а булевы �начени� (True или False�. Эти ��ерат�ры ча�т� и���ль�уют�� дл� и��енени� на�равлени� вы��лнени� �ценари�, �а� в �ледующе� �ри�ере: ifAge>40then write "Вы не стареете, а набираетесь мудрости" end if С�четание �начений и ��ерат�р�в на�ывает�� выражением. В�т �ри�еры вы� ражений: Выражение Значение выражения 3+3 Чи�л� 6 2<20 Булев� �начение True "A" & "B" Стр��а "AB" Date() + 1 Завтрашн�� дата
Введение в VBScript 75 Каждый и� ��ерат�р�в в �ажд�й �ате��рии ��ладает превосходством или �ри� �ритет��, ��редел�ющи� ��р�д��, в ��т�р�� вычи�л�ют�� ча�ти выражени�. П�� р�д��, ��редел�е�ый �рев��х�д�тв�� внутри вычи�лени�, и�рает весьма важную р�ль. На�ри�ер, �начение выражени� 1+3*3 равн� 10, а не 12. Следу� ���лашению, и���ль�уе���у �ате�ати�а�и, у�н�жение и�еет ��лее вы���ий �ри�ритет, че� �л�жение. V�S���p� �начала вычи�л�ет 3*3, а �ате� �ри�авл�ет ре�ультат � 1. (Ка� вы, наверн�е, ���ните, эт�т в��р�� ра���атривал�� в ш��ле на ур��ах ал�е�ры.� Чт��ы �а�тавить V�S���p� вычи�л�ть выражени� в дру��� ��р�д�е, и���ль�уют�� �����и. На�ри�ер, вычи�ление выражени� (1+3)*3 �риведет � ре�ультату 12. Вы� ражени� в �����ах вычи�л�ют�� в �ервую �чередь. Ин��да выражени� ��держат ��ерат�ры и� не���ль�их �ате��рий. На�ри�ер, �ледующее �равнение ��держит �а� ариф�етиче��ий ��ерат�р, та� и ��ерат�р �равнени�: ifA+B>Cthen... В данн�й �итуации вычи�лени� � ариф�етиче��и�и ��ерат�ра�и �р�в�д�т�� в �ервую �чередь, а �ате� �р�в�д�т�� вычи�лени� � ��ерат�ра�и �равнени�, а вы� чи�лени� � ��ерат�ра�и like, and и or �р�в�д�т�� в ���леднюю �чередь. В�е ��ера� т�ры �равнени� и�еют �дина��вый �ри�ритет, т� е�ть �ни вычи�л�ют�� в ��р�д�е �лед�вани� �лева на�рав�. О�ерат�ры V�S���p� �еречи�лены в та�л. 2 .1 –2 .3 . Таблица 2.1. Арифметические операторы в порядке убывания приоритета Оператор Назначение Пример Результат Унарн�е �трицание -5 -5 ^ В��ведение в �те�ень 2^5 32 * У�н�жение 2*3 6 / Деление 9/2 4,5 \ Цел�чи�ленн�е деление 9\2 4 Mod Цел�чи�ленный ��тат�� �т делени� 9 mod 2 1 + Сл�жение 3+5 8 - Вычитание 8-5 3 & О�ъединение �тр�� " abc" & "de" "abcde" О�ерат�р + та�же ��ъедин�ет �тр��и, н�, �а� уже у���инал��ь, лучше выра� ��тать у �е�� �ривыч�у и���ль��вани� + дл� чи�ел, а & дл� �тр��. И���ль��вание ��ерат�ра & делает ��н�тнее вашу �р��ра��у, ра��та ведет�� не � чи�ла�и, а �� �тр��а�и.
76 Глава 2. Руководство по VBScript Таблица 2.2. Операторы сравнения Оператор Назначение Пример Результат = Равн� 3=4 False <> Не равн� 3<>4 True < Меньше че� 3<4 True > Б�льше че� 3>4 False <= Меньше че� или равн� 3<=4 True >= Б�льше че� или равн� 3>=4 False is Э�вивалентн��ть ��ъе�т�в obj1 is obj2 False О�ерат�ры �равнени� и���ль�уют�� �лавны� ��ра��� дл� т���, чт��ы дать в��� ��жн��ть �ценарию вы�ирать ра�ные дей�тви� в �ави�и���ти �т ���т��тель�тв. На�ри�ер, �ценарий ��жет вы�рать удаление файла, е�ли �� вре�ени е�� ���дани� �р�шл� ��лее 24 ча��в: file_hours = DateDiff('h ', file.DateLastModified, Now()) if file_hours > 24 then file.Delete end if В �ерв�й �тр��е ��редел�ет��, ���ль�� ча��в �р�шл� � тех ��р, ���да интере� �ующий на� файл �ыл ���дан или и��енен. Зате� �равнение file_hours > 24 дает ре�ультат True, е�ли �ере�енна� file_hours и�еет �начение ��льше 24. Таблица 2.3. Логические операторы в порядке убывания приоритета Оператор Назначение Пример Результат not Отрицание not(3=4) True and К�нъюн�ци� (3=4)and(3<4) False or Ди�ъюн�ци� (3=4)or(3<4) True xor И��лючение (ра�личн��ть� true xor true False eqv Э�вивалентн��ть (�дина��в��ть� false eqv false True imp И��ли�аци� (�дина��в�е �начение или вт�р�е �начение равн� True� false imp true True Л��иче��ие ��ерат�ры и���ль�уют�� дл� ��ъединени� �тдельных �равнений, �редна�наченных дл� ��ределени� ��лее �л�жных �итуаций. На�ри�ер, «Е�ли файл �тарше 3 дней или и�� у файла anything.TMP, т� файл �ледует удалить». ▼) Опытным программистам: логические операторы могут использоваться с булевыми или число- выми значениями. С числовыми значениями они осуществляют поразрядные операции, а с бу- левыми значениями — логические.
Управление ходом выполнения сценария 77 Е�ли в�е эт� ва� в н�вин�у, не �т�ит �ереживать. (Фа�тиче��и, ни � �а�, ни �т��ни�удь в ����ании M���oso�� та� и не �нае�, �де ��жн� �ри�енить ��ерат�р imp.� В �ри�ерах, �рив�ди�ых в данн�й �лаве, и���ль�уют�� ��лее �ра�тичные ��ерат�ры. А �ейча� нужн� �а���нить, чт� дл� �ажд�й ��н�вн�й �ате�атиче���й фун�ции е�ть �в�й ��ерат�р, и �ри не��х�ди���ти в�е�да ��жн� ��ратить�� � эти� та�лица�, �де найдет�� в�е не��х�ди��е. Автоматическое преобразование Ка� уже у���инал��ь, е�ли в �дн�� выражении ��четают�� �начени� �ере�енных или ��н�тант ра�н��� ти�а, V�S���p� �ытает�� �риве�ти �начени� � �рие�ле�ы� ти�а�. Х�т� у�н�жение даты на чи�л� ��ы�ла не и�еет (���ль�� �удет, е�ли 2 у�� н�жить на 4 ав�у�та?�, ��ерат�ры �л�жени� и вычитани�, �а� ���а�ан� в та�л. 2.4, ра��тают в��лне �ред��а�уе��. Таблица 2.4. Автоматическое преобразование для сложения и вычитания Операция Результат Чи�л� + или – Стр��а Е�ли �тр��а �ред�тавл�ет ����й чи�л�, �на �ре��ра�ует�� в чи�� л�, и в ре�ультате ��лучает�� чи�л�. В �р�тивн�� �лучае �р�� �ра��а ��танавливает�� и выдает�� ����щение �� �ши��е Дата (вре��� + или – Чи�л� Дата. Цела� ча�ть чи�ла �ри�авл�ет�� � дате в �аче�тве ��личе� �тва дней. Лю�а� др��на� ча�ть чи�ла д��авл�ет�� в виде ��еще� ни� вре�ени, �а� др��на� ча�ть дн� (1 �е�унда = 0,0000115741; 12 ча��в = 0,5� Дата + или – Стр��а Е�ли �тр��а �ред�тавл�ет ����й чи�л�, �на �ревращает�� в чи�� л�, и в ре�ультате ��лучает�� дата. В �р�тивн�� �лучае �р�и�� х�дит �ши��а В�е, чт� у��дн� & В�е, чт� у��дн� Значени� лю���� ти�а �ревращают�� в �тр��и, ��т�рые �ате� ��ъедин�ют�� Управление ходом выполнения сценария Х�р�ш�, чт� те�ерь вы уже ��жете �ри�ваивать �ере�енны� �начени� и вы� ��лн�ть вычи�лени�, н� на�т��ща� ��щн��ть �р��ра��ир�вани� �а�лючает�� в �н����ратн�� вы��лнении ��ераций, и в вы��лнении ра�личных дей�твий, ���да т��� тре�уют у�л�ви�. Зде�ь в�ту�ает в �илу у�равление �ценарие�. В�е�т� ���лед�вательн��� вы��лнени� �ажд�й �тр��и �р��ра��ы �верху вни�, ��жн� � ����щью условных операторов у�а�ать, �а� �р��ра��а д�лжна реа�ир�вать на ра�личные ��ладывающие�� �итуации. Операторы цикла ���в�л�ют вы��лн�ть ��н�ретные ��ерат�ры �н����ратн�. В ��ерат�рах ци�ла �а�и�ан� не т�ль�� �а� у�равл�ть ��вт�р�ющей�� �адачей, н� та�же и �а� у�нать, ���да �а�у�тить и ���да ��тан�вить �адачу.
78 Глава 2. Руководство по VBScript ▼) В данной главе и в документации Microsoft можно увидеть, что в некоторых случаях операто- Microsoft можно увидеть, что в некоторых случаях операто- можно увидеть, что в некоторых случаях операто- ры пишутся с большой буквы. Регистр символов значения не имеет; VBScript не чувствителен к регистру. Например, операторы IFA=3THEN ifA=3Then Ifa=3then имеют для VBScript одинаковый смысл. По соглашению, которого придерживаются в Microsoft, операторы VBScript пишутся с большой буквы, но я считаю, что это выглядит довольно странно и приводит к лишним хлопотам, поэтому я не собираюсь использовать большие буквы в боль- шинстве слов VBScript, используемых в данной главе. С большой буквы имеет смысл писать длинные имена, такие как CreateTextFile, просто для того, чтобы их легче было читать, поэтому, как вы увидите в данной главе, я склоняюсь к на- писанию с большой буквы имен функций, объектов, методов и свойств. Следует помнить, что регистр букв совершенно ничего не значит для VBScript. Благодаря применению букв разных регистров сценарии просто легче читаются. Оператор If ... Then О�ерат�р If ... Then �р�вер�ет т�, чт� на�ывает�� условием, и е�ли эт� у�л�вие ���людает�� (вычи�л�ет�� в и�тинн�е �начение�, вы��лн�ет �дин или не���ль�� ��ерат�р�в V�S���p�. Ра����три� �ледующий �ри�ер: ' Файл примера script0201.vbs if Hour(Time()) < 12 then MsgBox "Сейчас уже утро, пора вставать!" end if У�л�вие� �лужит выражение, ��т�р�е ��жет �ыть �р�верен� � ��ределение� е�� и�тинн��ти или л�жн��ти (��u� или ���s��. В �редыдуще� �ри�ере у�л�ви� е� �лужит выражение Hour(Time()) < 12. Зде�ь, в V�S���p�, Time()�ред�тавл�ет те�ущее вре�� �ут��, а Hour(Time())�ред�тавл�ет те�ущий ча� �ут�� — чи�л� �т 0 д� 23. С ��лун�чи и д� ��лудн� эт� чи�л� �еньше 12, ��эт��у, ���да у�л�вие Hour(Time()) < 12 �вл�ет�� и�тинны�, �ценарий выв�дит ����щение «Сейча� уже утр�, ��ра в�тавать!» При на�ту�лении ��лудн� �начение ча�а �тан�вит�� равны� или ��льши� 12, ��эт��у ����щение не выв�дит��. На ри�. 2.1 ���а�ан�, чт� � уви� дел, �а�у�тив эт�т �ценарий утр��. Рис. 2 .1 . Сообщение «Сейчас уже утро», выводимое, когда значение времени суток меньше 12 часов О�ерат�ры If ... Then ���ут у�равл�ть ��ведение� ваших �ценариев на ��н�ве лю�ых у�л�вий, ��т�рые ���ут �ыть �а�и�аны в виде ����инации �ере�енных,
Управление ходом выполнения сценария 79 ��ерат�р�в и фун�ций V�S���p�, выдающих ре�ультат в виде �улев��� �начени� (true или false�. О�ерат�р If ... Then и�еет р�д ра�н�видн��тей, �����ающих ��равл�ть�� � ��� лее �л�жны�и �итуаци��и. В���ервых, ���да �ри и�тинн��ти у�л�ви� нужн� и���ль��вать т�ль�� �дин ��ерат�р, ве�ь ци�л ��жн� ���е�тить в �дн�й �тр��е: if Hour(Time()) < 12 then MsgBox "Сейчас уже утро, пора вставать!" К��да �ри ���людении у�л�ви� тре�ует�� и���ль��вать ��лее �дн��� ��ерат�ра, нужн� в����ль��вать�� вер�ией If...End If. С� �л�ва Then в ��нце �тр��и начинает�� �ру��а ��ерат�р�в, вы��лн�е�ых �ри ���людении у�л�ви�, а �л�ва�и End If ��� �ечает�� ��нец �ру��ы ��ерат�р�в. Ра����три� �ри�ер: if Hour(Time()) < 12 then MsgBox "Доброе утро!" runreport "Сегодняшние дела" DeleteTemporaryFiles end if В эт�� �ри�ере, е�ли �ценарий �а�у��ает�� д� ��лудн�, ��ерат�р if �а�у��ает три ��ерат�ра, ра���л�женных �ежду if и end if. Е�ли нужн� вы��лнить не���ль�� ��ерат�р�в �ри ���людении у�л�ви�, н� та�же нужн� вы��лнить не���ль�� дру�их ��ерат�р�в �ри не���людении эт��� у�л�ви�, ��жн� в����ль��вать�� вер�ией If...Then...Else: if условие then операторы vbscript, выполняемые при соблюдении условия else операторы vbscript, выполняемые при несоблюдении условия end if При вы��лнении �ценари� вы��лн�ет�� т�т или ин�й на��р ��ерат�р�в. Ра�� ���три� �ри�ер: ' Файл примера script0202.vbs if Hour(Time()) < 12 then MsgBox "Доброе утро" else MsgBox "Добрый день" end if Е�ли в �л��е Else и���ль�ует�� т�ль�� �дин ��ерат�р, е�� ��жн� ���е�тить в т�й же �тр��е, чт� и else, не и���ль�у� �л�в� if. Ра����три� четыре в����жных варианта ра���л�жени�: if условие then операторы . . . else операторы . . . end if if условие then операторы . . .
80 Глава 2. Руководство по VBScript else оператор if условие then оператор else ' учтите, слово else должно быть в конце операторы 'строки . . . end if if условие then оператор else оператор И на��нец, ин��да ��наруживает��, чт� �дн��� �л��а Else �вн� нед��тат�чн�. Еще в �дн�� варианте ��ерат�ра If и���ль�ует�� эле�ент ElseIf. При�ен�� ElseIf, в �дн�� длинн�� ��ерат�ре ��жн� �р�верить �ра�у не���ль�� у�л�вий: if условие then операторы vbscript elseif еще_одно_условие then другие операторы vbscript elseif и_еще_одно_условие then и еще ряд операторов else последний набор операторов end if В данн�� �лучае ���ть вы��лн�ет�� т�ль�� �дин и� этих на��р�в ��ерат�р�в — т�т, ��т�рый �тн��ит�� � �л��у, у ��т�р��� �ервы� вы��лнит�� условие. Е�ли ни �дн� и� у�л�вий не �удет вы��лнен�, �удет �а�ущен ���ледний ��ерат�р �л��а Else. При и���ль��вании ElseIf �ри�ен�ть ф�р�ат «в�е в �дн�й �тр��е» нель��. Учтите, чт� ��ерат�р If ��жет �ыть та�же вл�жен в дру�ую ��лее �л�жную �тру�туру: if filetype = " .EX E" then if filename = "WINWORD" then MsgBox "Файл является программой WINWORD.EXE " else MsgBox "Файл является какой-то другой программой" end if else MsgBox "Это какой-то другой тип файла" end if Зде�ь �ри�ут�твует «внутренний» ��ерат�р If, ��т�рый вы��лн�ет�� т�ль�� в т�� �лучае, ���да �ере�енна� filetype и�еет �начение " .�X �" . ▼▼ При использовании вложенных операторов If заниматься отладкой сценария и разбираться в нем будет проще, если записывать содержимое каждого последующего оператора If с от- Ifсот- с от- ступом, как это сделано в предыдущем примере. VBScript не реагирует на отступы, но они облегчают чтение сценария. Оператор Select Case Пред��л�жи�, чт� е�ть ра�ные ��ерат�ры, ��т�рые нужн� вы��лн�ть в �ави� �и���ти �т дн� недели. И� �редыдуще�� ра�дела и�ве�тн�, чт� дл� вы��лнени� �а�����ни�удь фра��ента ��да V�S���p� в �ави�и���ти �т дн� недели ��жн� в���
Управление ходом выполнения сценария 81 ��ль��вать�� �ерией ��ерат�р�в If и ElseIf. На�ри�ер, �ере�енн�й DayNumber ��жн� �ри�в�ить чи�л�в�е �начение (и���ль�у� ��н�танты vbMonday, vbTuesday и т. д .�, ���твет�твующее дню недели. Т��да ��жн� �удет в����ль��вать�� длинны� ��ерат�р�� If дл� ��ра��т�и �ажд��� в����жн��� �луча�: DayNumber = Weekday(Date()) if DayNumber = vbMonday then MsgBox "Понедельник, футбольный вечер по телевизору" elseif DayNumber = vbTuesday then MsgBox "Вторник, занятия по музыке" elseif DayNumber = vbWednesday then MsgBox "Среда, иду в кино" elseif DayNumber = vbThursday then ... (и так далее) end if Н� е�ть ��лее �р��т�й ������. К��да нужн� вы��лнить на��р ��ерат�р�в на ��н�ве �а�����ни�удь �дн��� ��ецифиче����� �начени�, ��т�р�е ��жет �рин�ть �ере�енна� или выражение, ��льше ��д�йдет ��ерат�р Select Case. Ра����три� �ри�ер: ' Файл примера script0203.vbs DayNumber = Weekday(Date()) select case DayNumber case vbMonday: MsgBox "Понедельник, футбольный вечер по телевизору" case vbTuesday: MsgBox "Вторник, занятия по музыке" case vbWednesday: MsgBox "Среда, иду в кино" case vbThursday: MsgBox "Четверг, рыбалка!" case vbFriday: MsgBox "Пятница, вечеринка!" case else: MsgBox "Расслабься, конец недели!" end select При вы��лнении ��ерат�ра Select Case V�S���p� ���трит на �начение DayNumber и вы��лн�ет т�ль�� те ��ерат�ры, ��т�рые нах�д�т�� �ра�у же �а �дни� ��в�ада� ющи� эле�ент�� Case. П��ле эле�ента Case ��жн� ���тавить ��лее �дн�й �тр��и ��ерат�ра, �л�жные ��ерат�ры, в�люча� If...Then, и дру�ие ��н�тру�ции у�рав� лени�. М�жн� та�же у�а�ать эле�ент Case Else, чт��ы �н �лужил л�вуш��й, е�ли �начени� выражени� Select Case не �удет ���твет�тв�вать ни �дн��у и� �ере� чи�ленных �начений. В �риведенн�� �ри�ере Case Else �ани�ает�� ��ра��т��й �у���ты и в���ре�ень�. ▼▼ Функция Weekday возвращает числа в диапазоне от 1 до 7, чтобы показать день недели от вос- Weekday возвращает числа в диапазоне от 1 до 7, чтобы показать день недели от вос- возвращает числа в диапазоне от 1 до 7, чтобы показать день недели от вос- кресенья до субботы. Не нужно помнить, что означает 1, воскресенье или понедельник или что- нибудь еще. Для нашего удобства VBScript включает предопределенные константы с именами vbSunday, vbMonday, vbTuesday и т. д ., которые можно использовать вместо чисел. Константы рассматривались в начале этой главы. Не���тр� на в�ю �в�ю эффе�тивн��ть и и��щн��ть, ��ерат�р Select Case не ��� жет ��равить�� � �ажд�й альтернативн�й �итуацией. Е�� дей�твие ��раничивает�� �адача�и, �де решение, �� ��т�р��у делает�� вы��р, �ави�ит �т �равнени� един� �твенн��� у�а�анн��� �начени�, на�ри�ер Daynumber = vbWednesday или Username = "Adminisnrator".
82 Глава 2. Руководство по VBScript Е�ли решение �ави�ит �т диа�а��на �начений и е�ли вы не ��жете �р��т� �ере� чи�лить в�е �начени�, ��т�рые д�лжны ���твет�тв�вать, а та�же е�ли в �рин�тие решени� в�влечен� ��лее �дн�й �ере�енн�й, нужн� и���ль��вать ��н�тру�цию If...Then. О�ерат�р Select Case и�еет р�д дру�их ����енн��тей: y y О�ерат�ры ���ут �лед�вать �а выражение� case значение: в т�й же �а��й �тр��е. V�S���p� д��у��ает �а�и�ь Case значение: оператор или Case значение: оператор Я ��ычн� и���ль�ую ф�р�ат «в�е в �дн�й �тр��е», ���да �а в�е�и или �а ��льшин�тв�� �лючевых �л�в case �ледует т�ль�� �дин ��ерат�р, �а� в ���а� �анн�� ранее �ри�ере � дн��и недели. К��да ��ерат�ры ���ле �лючевых �л�в case и�еют ��лее �л�жный хара�тер, � начинаю ��ерат�ры � н�в�й �тр��и � �т� �ту��� �тн��ительн� �л�ва case. y y Е�ли �дин на��р ��ерат�р�в ��жет ��ра�атывать �ра�у не���ль�� �начений, эти �начени� ��жн� у�а�ать ���ле �л�ва case. На�ри�ер, ��жн� на�рать case 1, 2, 3:, ���ле че�� у�а�ать ��ерат�ры V�S���p�. y y Е�ли �дн� и т� же �начение фи�урирует ��лее че� в �дн�� ��ерат�ре case, V�S���p� не �енерирует ����щение �� �ши��е. Вы��лн�ют�� ��ерат�ры, �ле� дующие �а �ервы� ���твет�твующи� ��ерат�р�� case, а лю��е дру��е ���т� вет�твие и�н�рирует��. y y В �аче�тве �начени� ��ерат�ра case ��жн� и���ль��вать �ере�енную или вы� ражение. Ра����три� �ри�ер: некое_значение = 3 select case переменная case некое_значение: операторы case 1, 2: операторы case else операторы end select Е�ли �начение переменной равн� 3, вы��лн�ют�� ��ерат�ры, �ледующие �а �ервы� �л�в�� case. Е�ли �ере�енна� ��жет �рини�ать �начени�, �еречи�ленные в дру�их �л�вах case, �ледует ���нить, чт� и���ль��ван� �удет т�ль�� �ерв�е ��� �твет�твие. Цикл Do While Зача�тую нужн� ���дать �ценарий, �аранее не �на�, ���ль�� и�енн� эле�ент�в ��тре� �ует�� ��ра��тать или ���ль�� ра� ��тре�ует�� ��вт�рить �а��е�ни�удь дей�твие. О�ерат�ры ци�ла ���в�л�ют ��равл�ть�� � ��д��н��� р�да �адача�и. В �аче�тве �р��т��� �ри�ера ��жн� �риве�ти �адачу � �в�рачивании н����, ��т�рую ��жн� ��и�ать на ��ычн�� ��ы�е �ледующи� ��ра���:
Управление ходом выполнения сценария 83 пока в бельевой корзине есть носки, взять из корзины пару носков свернуть их вместе положить их в ящик для носков повторить действия В V�S���p� и�еет�� ��ерат�р Do While, �редна�наченный дл� �н����ратн��� ��� вт�рн��� вы��лнени� �л��а ��да. В V�S���p� �адача и�влечени� н����в и� �ельев�й ��р�ины ��жет и�еть �ледующий вид: do while NumberOfSocksLeft >= 2 'Выполнять, пока количество носков >= 2 MatchUpSocks 'Подобрать пару носков FoldSocks 'Свернуть носки PutSocksAway 'Положить носки в новое место NumberOfSocksLeft = NumberOfSocksLeft - 2 loop Зде�ь ��д в �тр��е Do While ����щает V�S���p�, ��жн� ли вы��лнить ��ерат�� ры, �ледующие �а данн�й �тр���й, а �лючев�е �л�в� Loop �т�ылает V�S���p� на�ад � �р�вер�е у�л�ви� и ��вт�рению ���ыт�и вы��лнени� ��ерат�р�в. Е�ли нужн�, ��ерат�ры Do While ���ут �ыть вл�жены дру� в дру�а. Кажд�е �лючев�е �л�в� Loop �ри�ен�ет�� � �лижайше�у ��ерат�ру, �ледующе�у �еред ней: do while условие операторы do while еще_одно_условие еще операторы loop здесь могут быть дополнительные операторы loop Нетрудн� �а�етить, чт� �т�ту�ы, �ри�ен�е�ые дл� ��ерат�р�в внутри �ажд��� ��ерат�ра Do While, ��ле�чают чтение и ��ни�ание ��да �ценари�. Суще�твует ��ть вер�ий ци�ла Do While, �ажда� и� ��т�рых не�н��� �тличает�� �т ��тальных: do while условие операторы loop do until условие операторы loop do операторы loop while условие do операторы loop until условие do операторы if условие then exit do операторы loop
84 Глава 2. Руководство по VBScript В �ерв�й вер�ии V�S���p� вычи�л�ет �улев� условие. Е�ли е�� �начение равн� True, V�S���p� вы��лн�ет оператор или операторы внутри ци�ла и в��вращает�� дл� ��вт�рени� �р�вер�и у�л�ви�. Ци�л ��вт�рн� вы��лн�ет ��ерат�ры в���ий ра�, ���да ��редел�ет, чт� условие в�е еще вычи�л�ет�� в True. Вт�ра� вер�и� ��вт�рн� вы��лн�ет ��ерат�ры в���ий ра�, ���да ��редел�ет, чт� условие в�е еще вычи�л�ет�� в False, т� е�ть ���а условие не вы��лнит�� в True. М�жн� та�же на�и�ать do while not (условие) операторы loop и ��лучить т�т же �а�ый ре�ультат. Заче� нужны ��е вер�ии? Ин��да нужн� на� �и�ать «���а еще е�ть н���и в �ельев�й ��р�ине», а ин��да нужн� на�и�ать «���а �ельева� ��р�ина не �танет �у�та». Вер�ии While и Until �ред��тавл�ют�� � т�й целью, чт��ы и� них ��жн� �ыл� вы�рать интуитивн� ��лее ��н�тную. Следует в�е же �а�етить, чт� е�ли в этих �ервых двух вер�и�х у�л�вие While или Until не ���людает�� уже д� �ерв��� вы��лнени� ци�ла, ��ерат�ры, ���тавл�ющие ци�л, ни���да не вы��лн�ют��. Чт� же �а�ает�� вт�рых двух вер�ий, та� �р�вер�а ���людени� у�л�ви� нах�дит�� в конце ци�ла, ��эт��у ��ерат�ры внутри эт��� ци�ла в�е�да вы��лн�ют�� как минимум �дин ра�. В ���ледней вер�ии ���а�ан�, �а� ��жн� �авершить ци�л изнутри. О�ерат�р exit do �ред�и�ывает V�S���p� не�едленн� ��тан�вить дальнейшее вы��лнение ��ерат�р�в ци�ла и �ри�ту�ить � вы��лнению ��ерат�ра, �ледующе�� �ра�у же �а их ���нчание�. В эт�й ��т�й вер�ии ци�л в�е�да вы��лн�ет�� �а� �ини�у� �дин ра�, и �р�вер�а вы��лнени� у�л�ви� на вых�д и� ци�ла �р�в�дит�� т�ль�� �де� ни�удь ���редине ци�ла. В���ще�т� и���ль��вать ��ерат�р exit do ��жн� в лю��� и� ��ти вариант�в ци�ла Do While. В �ледующих ра�делах ��ерат�р exit do �удет ра����трен ��лее ��др��н�. При ���дании �ценари� � и���ль��вание� ци�ла Do While нужн� �делать �ау�у и решить, �а�а� и� этих вер�ий лучше ��д�йдет. Ка� �тветить на данный в��р��? Одн��начн��� �твета не �уще�твует. Нужн� в�ве�ить в�е ���т��тель�тва �ри�ени� тельн� � ��н�ретн��у ���дающе�у�� �ценарию. О�ычн� в ваше� ра���р�жении и�еют�� две �хе�ы, и� ��т�рых �ледует �делать �в�й вы��р. ШАБЛОН Когда нужно выполнить задачу необходимое количество раз, до тех пор пока не будет выпол- нена вся работа, поместите проверку выполнения условия в самое начало цикла: do while (условие, соблюдение которого свидетельствует о выполнении работы) операторы loop Когда нужно выполнить задачу хотя бы один раз и остановиться только в том случае, если что-нибудь произойдет при выполнении этой задачи, поместите проверку выполнения условия в конец цикла: do операторы while (условие, соблюдение которого свидетельствует о том, что работа еще не выполнена) Выберите одну из двух версий While и Until, разобравшись, какая из них больше подходит, проговорив вслух весь порядок работы оператора.
Управление ходом выполнения сценария 85 Прекращение выполнения цикла с помощью оператора Exit Do Ин��да нужн� выйти и� ци�ла Do While или и� дру���� ��д��н��� е�у ци�ла на ��н�ве ре�ультат�в, ��лученных в �ередине ���тавл�ющих е�� ��ерат�р�в, а не в е�� начале или ��нце. В та��� �лучае дл� не�едленн��� �ерех�да �а �ределы ци�ла на вы��лнение ��ерат�ра, ��т�рый �ледует �ра�у �а ци�л��, ��жет и���ль��вать�� ��ерат�р Exit Do. Пред��л�жи�, на�ри�ер, чт� �жидает�� ��ра��т�а ��ти файл�в � и�ена�и FILE1.DAT, FILE2.DAT и т. д . Е�ли ��наружит��, чт� �аданный файл �т�ут�твует, ��жет ���вить�� не��х�ди���ть ��тан�вить в�ю ��ра��т�у и не и��ать файлы � �о`льши�и н��ера�и в и�ени. Ка� эт� ��жн� �делать в �ценарии, ���а�ан� в �ле� дующе� �ри�ере: set fso = CreateObject("Scripting.FileSystemObject") num=1 do while num <= 5 ' обработка файлов с 1 до 5: filename = "C:\TEMP\FILE" & num & ". DAT " ' формирование имени файла if not fso.FileExists(filename) then ' проверка существования файла exit do ' есл и н ет, досрочное прекращение end if Process filename ' выз ов п одпрограммы "process" num=num+1 ' переход к следующему файлу loop В данн�� �ри�ере �ри �ерв�� �р�х�де ци�ла �ере�енн�й filename �ри�ваи� вает�� �начение FILE1.DAT. При �ажд�� �р�х�де ци�ла н��ер в и�ени файла уве� личивает�� на единицу. Пр�вер�ет��, �уще�твует ли файл, и�� ��т�р��� нах�дит�� в �ере�енн�й. Е�ли та���� файла нет, ��ерат�р Exit Do выв�дит вы��лнение �р�� �ра��ы �а �ределы ци�ла еще д� т���, �а� �удет �ред�рин�та ���ыт�а ��ра��т�и �т�ут�твующе�� файла. Нет ни�а�их ��н�ваний ��раничивать ци�л Do While фи��ир�ванны� чи�л�� ��вт�рений. Е�ли в���ще у�рать �р�вер�у у�л�ви� «do», ци�л �танет �е���нечны�. М�жн� �ере�и�ать �редыдущий �ценарий дл� ��ра��т�и наи��льше�� ��личе�тва ��наруженных файл�в, � �ерв��� и д� ���ледне�� �уще�твующе��: ' Файл примера script0204.vbs set fso = CreateObject("Scripting.FileSystemObject") num=1 do ' обработка наибольшего найденного количества файлов filename = "C:\TEMP\FILE" & num & ". DAT " ' формирование имени файла if not fso.FileExists(filename) then ' проверка существования файла exit do ' ес ли нет, досрочное прекращение Process filename ' вы зов подпрограммы "process" num=num+1 ' переход к следующему файлу loop Зде�ь, в �т�ут�твие ��ерат�ра While или Until, ци�л вы��лн�ет�� �е���нечн� (�р��ра��и�ты на�ывают е�� �е���нечны� ци�л���, ���а не �удет �авершен ��ера� т�р�� Exit Do. Эт� ��начает, чт� в данн�� �лучае нужн� �р��вл�ть ����ую ����три� тельн��ть, чт��ы, в ��нечн�� ит��е, ��ерат�р Exit Do ��� �ы в�е же вы��лнить��, иначе ваш �ценарий �удет �рутить�� в ци�ле �е���нечн� (или ���а у ва� не л��нет тер�ение и вы не �рервете е��, нажав ����инацию �лавиш Ctrl+C�. О�ерат�р Exit Do ра��тает в лю��� и� четырех вариант�в ци�л�в Do While и Do Until.
86 Глава 2. Руководство по VBScript Вычисления с помощью оператора For...Next К��да ци�л д�лжен �р�йти чере� ��ределенн�е ��личе�тв� ��вт�рений (итераций�, лучше в�е�т� ��ерат�ра Do While вы�рать ��ерат�р For...Next. Первый �ри�ер, и���ль��ванный дл� иллю�трации ра��ты ��ерат�ра Exit Do, ��жн� �ере�и�ать в виде ци�ла For: ' Файл примера script0205.vbs set fso = CreateObject("Scripting.FileSystemObject") fornum=1to5 ' обработка файлов с 1 по 5: filename = "C:\TEMP\FILE" & num & ". DAT " ' формирование имени файла if not fso.FileExists(filename) then ' проверка существования файла exit for ' е сли не т, досрочное прекращение end if Process filename ' в ызо в п одпрограммы "process" next Ци�л For �ри�ваивает �ере�енн�й (в данн�� �ри�ере num� �ерв�е �начение (�де�ь 1� и вы��лн�ет ��ерат�ры внутри ци�ла. Зате� �н увеличивает �начение �е� ре�енн�й на единицу и ��вт�р�ет ��ерат�ры д� тех ��р, ���а �начение �ере�енн�й не �танет �ревышать �начение, у�а�анн�е ���ле �лючев��� �л�ва To (�де�ь 5�. Та�и� ��ра���, данный ци�л вы��лн�ет ��ерат�ры �ри �начени�х num = 1, 2, 3, 4 и 5. В данн�� �ри�ере та�же и���ль�ует�� ��ерат�р Exit For, ��т�рый ра��тает в т�чн��ти та� же, �а� и ��ерат�р Exit Do, �а и��лючение� т��� чт� �н выв�дит вы��лнение �р��ра��ы и� ци�ла For, а не и� ци�ла Do. (С��ла�ите�ь, в эт�� е�ть ��ределенный ��ы�л.� О�ерат�р Exit For �а�тавл�ет интер�ретат�р V�S���p� �р�� д�лжить вы��лнение �ценари� �� �тр��и, нах�д�щей�� �ра�у же ���ле �лючев��� �л�ва Next. О�ерат�р For ��жет �ыть на�и�ан �дни� и� двух �������в: for счетчик = начальное_значение to конечное_значение или for счетчик = начальное_значение to конечное_значение step шаг_изменения Зде�ь счетчик �ред�тавл�ет ����й и���ль�уе�ую �ере�енную; начальное_значе ние — �начение, �ри�ваивае��е �ере�енн�й �ри �ерв�� �р�х�де ци�ла; конечное_ значение — наи��льшее �начение, �ри�ваивае��е �ере�енн�й; а шаг_изменения, е�ли �н у�а�ан, �вл�ет�� �риращение� счетчика ���ле �ажд��� �р�х�да ци�ла. Е�ли нужн�, чт��ы в ци�ле �ри�ен�л�� ��ратный �т�чет, �а� в �дн�й и�ве�тн�й, н� д�в�льн� нудн�й �е�не, шаг_изменения ��жет и�еть �трицательн�е �начение: ' Файл примера script0206.vbs for number_of_bottles = 100 to 0 step -1 wscript.echo number_of_bottles & " бутылок пива на стене!" next ▼) В этом примере демонстрируются широкие возможности операторов цикла. В отсутствие опе- ратора For пришлось бы набирать каждую строку слов песни wscript.echo "100 бутылок пива на стене!" wscript.echo "99 бутылок пива на стене!" wscript.echo "98 бутылок пива на стене!" и т. д . При использовании цикла For со всем этим можно справиться с помощью всего лишь трех строк кода.
Управление ходом выполнения сценария 87 Е�ли ��ерат�р Step не у�а�ан, �начение �ере�енн�й счетчик увеличивает�� на единицу ���ле �ажд��� �р�х�да ци�ла. ▼) Значение, указываемое за оператором step, не обязательно должно быть целым числом. Можно выбрать и дробный шаг изменения, если по какой-нибудь причине это понадобится. Как только значение превысит верхний предел на любое число, выполнение цикла прекратится. Обработка коллекций и массивов с помощью цикла For...Each Не��т�рые фун�ции V�S���p�, и�еющие ��ециальн�е на�начение, ���ут в��вра� щать ти� �ере�енн�й, на�ывае�ый ��лле�цией. К�лле�ци� �ред�тавл�ет ����й ��и��� и�ен файл�в, и�ен ��ль��вателей или дру�их данных, ��держащих�� в �дн�й �ере�енн�й. На�ри�ер, фун�ци�, ��уще�твл�юща� ��и�� в �атал��е, �� �а�р��у в�ех файл�в � и�ена�и *.DOC ��жет вернуть ��лле�цию и�ен файл�в. П����ль�у, ���рее в�е��, ��тре�ует�� ра��ечат�а, �р����тр или ра��та � эти�и файла�и, на� нужен ������ д��ту�а � �тдельны� �а�и��� ��лле�ции. Ци�л For...Each вы��лн�ет �в�и ��ерат�ры �� �дн��у ра�у дл� �ажд�й �а�и�и ��лле�ции. Ра����три� �ри�ер: ' Файл примера script0207.vbs set fso = CreateObject("Scripting.FileSystemObject") set tempfiles = fso.GetFolder("C:\TEMP").Files filelist = " " for each file in tempfiles filelist = filelist & ", " & file.name next MsgBox "Имеются следующие временные файлы:" & filelist В данн�� �ри�ере �ере�енн�й tempfiles �ри�ваивает�� �начение ��лле�ции в�ех файл�в, найденных в �а��е C:\TEMP. Ци�л For...Each ���дает �ере�енную �� и�ени file, и �ри �ажд�� �в�е� �р�х�де �н делает �ере�енную file ��ыл��й на �ледующий ��ъе�т ��лле�ции. Ци�л вы��лн�ет�� �дин ра� дл� �ажд��� файла. Е�ли ��лле�ци� �у�та, т� е�ть е�ли в �а��е C:\TEMP нет файл�в, т��да ци�л в�� ��ще не �а�у��ает��. М�жн� та�же и���ль��вать ��ерат�р For...Each дл� ра��ты � �ере�енны�и �а��ива, вы��лн�� ��держи��е ци�ла �� �дн��у ра�у дл� �ажд��� эле�ента �а��ива, �а� ���а�ан� в �ледующе� �ри�ере: dim names[10] ... for each nm in names ... next О�ерат�ры V�S���p� внутри эт��� ци�ла вы��лн�ют�� 10 ра�, �ри эт�� �ере�ен� на� nm �рини�ает �� �череди �начение �дн�й и� де��ти �ере�енных, хран�щих�� в �а��иве names. ССЫЛКА Получить дополнительную информацию о массивах можно далее в этой главе в разделе «Мас- сивы».
88 Глава 2. Руководство по VBScript П��ле �лючевых �л�в for each ��жн� и���ль��вать лю��е и�� �ере�енн�й, � вы�рал в �ри�ерах и�ена file и nm, ��т��у чт� �ни ���а�али�ь �не в��лне ��д� х�д�щи�и дл� данных �лучаев. Вы же ��жете и���ль��вать лю��е ра�решенн�е и�� �� �в�е�у у���трению. Функции VBScript Функции — эт� ��ециальные �л��и �р��ра��н��� ��да V�S���p�, ��т�рые ���ут �ыть а�тивир�ваны (или вызваны� �� и�ени. Фун�ции ���ут �ыть �ереданы дан� ные, ��т�рые нужн� ��ра��тать, и �на в�е�да в��вращает �начение т�й ча�ти �цена� ри�, и� ��т�р�й �ыла вы�вана. Дл� �начени�, �ереданн��� фун�ции, и���ль�ует�� техниче��ий тер�ин аргумент. На�ри�ер, в�тр�енн�й фун�ции UCase в �аче�тве ар�у�ента �ередает�� �тр���� ва� �ере�енна�, ��н�танта или выражение, а �на в��вращает �тр��у, в ��т�р�й в�е �у�вы �ереведены в верхний ре�и�тр. Ра����три� �ледующий �ри�ер: str1 = "my file.dat" str2 = Ucase(str1) В эт�� �ценарии �ере�енна� str2 вы�ывает фун�цию UCase, ��т�ра� �ерев�дит в�е �и�в�лы �начени� �ере�енн�й str1 в верхний ре�и�тр, а �ате� �ри�ваивает эт� �начение, "MY FILE.DAT", �ере�енн�й str2. Значение и�х�дн�й �ере�енн�й str1 и��енению не ��двер�ает��. В �ледующих �лавах �удет ра����трен� �н�же�тв� �ри�ер�в фун�ций. Е�ли на данный ���ент чт��т� не��н�тн�, не в�лнуйте�ь — в�е �р���нит�� �� �ере чтени� �ни�и. Вызов функций и подпрограмм В ранее ���а�анн�� �ри�ере �ыл �р�де��н�трир�ван вы��в фун�ций � у�а�ание� их ар�у�ент�в в �ру�лых �����ах. Фун�цию MsgBox ��жн�, � �ри�еру, вы�вать �ледующи� ��������: selectedbutton = MsgBox("Хотите продолжить?", vbYesNo) Фун�ци� MsgBox выв�дит в ���вл�юще��� ��не те��т�в�е ����щение и в��вра� щает �начение, ���а�ывающее, на �а��й �н���е щел�нул ��ль��ватель �ценари�. Е�ли ва� в�е равн�, �а��е �начение �удет в��вращен� фун�цией и вы не ���и� раете�ь и���ль��вать эт� �начение, т� в V�S���p� �ру�лые �����и ��жн� ��у�тить. В та��� �лучае фун�ци� ра���атривает�� в �аче�тве подпрограммы — та��е �тран� н�е на�вание и���ль�ует�� дл� фун�ции, ��т�ра� делает чт��ни�удь ��ле�н�е, н� не в��вращает �твет вы�вавшей ее �р��ра��е. В �ледующе� �ри�ере ���а�ана реали�аци� эт�й идеи �ри�енительн� � фун�� ции MsgBox. Я ���у и���ль��вать MsgBox дл� выв�да ��ле�н��� ����щени�, н� �ри эт�� �не в�е равн�, на �а��й �н���е щел�нет ��ль��ватель. П����ль�у � не ���ираю�ь и���ль��вать �начение, в��вращае��е MsgBox, � вы�ываю ее, �ри�ен�� ф�р�у вы��ва ��д�р��ра��ы, в ��т�р�й �ру�лые �����и и���ль�уют��: MsgBox "The script has finished", vbOK
Функции VBScript 89 Далее в эт�й �лаве �удут ���а�аны фун�ции, дл� ��т�рых и���ль�уют�� ��а ������а вы��ва. Следует �а���нить, чт� �ру�лые �����и �тав�т�� в�е�да, ���да и���ль�ует�� �начение, в��вращае��е фун�цией, и не �тав�т�� в т�� �лучае, ���да �н� не и���ль�ует��. К�тати, в V�S���p� �ру�лые �����и та�же ���ут �ыть ��ущены, ���да фун�ци� не ��лучает ни�а�их ар�у�ент�в. Ва� ���ут в�третить�� фун�ции, вы�ванные та�и� ��ра��� в д��у�ентации �� V�S���p�, �ред��тавленн�й ����анией M���oso��. В �аче�тве �ри�ера ��жн� �риве�ти в�тр�енную фун�цию Now(), в��вращаю� щую те�ущую дату и вре��. О�е эти �тр��и ра��тают в �ценарии а���лютн� �ди� на��в�: wscript.echo "The date and time are:", Now() wscript.echo "The date and time are:", Now Вт�ра� �тр��а вы�ывает фун�цию Now и выв�дит в��вращае��е �начение. П�� ��е�у, та��й ��дх�д вн��ит �утаницу, �����ль�у �ра�у нев����жн� ��н�ть, че� �вл�ет�� Now, �ере�енн�й или фун�цией. ▼▼ Во избежание путаницы между переменными и функциями я рекомендую при вызове функций всегда использовать круглые скобки. Документация и синтаксис В V�S���p� д��ту�ны ���л� 100 �ред��ределенных фун�ций, у�р�щающих ра� ��ту �р��ра��и�т�в. Эти фун�ции ра��тают �� �тр��а�и, вы��лн�ют �л�жные �ате�атиче��ие ра�четы (на�ри�ер, и�влечение �вадратн��� ��рн�� и вычи�л�ют �начени� даты и вре�ени. В�е �ни �еречи�лены в �рат��й �в�д�е в ��нце данн�й �лавы, а их ��др��н�е ��и�ание и�еет�� на ве���айте ����ании M���oso�� в д��у�ентации �� V�S���p� (technet.microsoft.com/scriptcenter�.Чт��ы �ред��тавить ва� ��на���ительную ин� ф�р�ацию � ти�ах фун�ций и �� их �ри�енении, не��т�рые и� них �удут ��д� р��н� ра���раны в данн�й �лаве. Н� �начала � ��ъ��ню, чт� вы ���жете увидеть в интера�тивн�й д��у�ентации. В д��у�ентации �� V�S���p� ���а�ывает�� синтаксис (т� е�ть тре�уе�ый ф�р�ат и на�и�ание �л�в� дл� �ажд�й фун�ции и ��ерат�ра ��ы�а. На�ри�ер, �инта��и� фун�ции MsgBox и�еет в ней �ледующий вид: MsgBox(prompt[, buttons][, title][, helpfile, context]) Кру�лые �����и ���а�ывают, чт� MsgBox �вл�ет�� фун�цией. Перечень внутри �ру�лых ������ ���а�ывает, чт� фун�ции MsgBox ��жн� �ередавать ��ть ар�у�ен� т�в. Квадратные �����и ([ и ]�, ��ружающие не��т�рые и� ар�у�ент�в, не ��начают, чт� их нужн� �ри�ен�ть на �а��� деле, т� е�ть �ри вы��ве фун�ции вы их не на� �ираете. Они ���а�ывают, чт� ар�у�енты внутри них �вл�ют�� не����ательны�и. В�е, чт� ���а�ан� внутри [ и ], ��жет �ыть ��ущен�. О�ъ��нени�, �рив�ди�ые в д��у�ентации �� �ажд��у ар�у�енту, ����щают, чт� �н ��начает, �а�ие �начени� ��жет �рини�ать и �а��е �начение �удет �ред���
90 Глава 2. Руководство по VBScript ла�ать�� на �е�те т��� или ин��� ар�у�ента, е�ли вы не �ред��тавите фун�ции �в�е ����твенн�е �начение. Пред��ла�ае��е �начение �ри �т�ут�твии �редл�женн��� на�ывает�� значением по умолчанию. В �лучае � и���ль��вание� фун�ции MsgBox ��жн� �а�етить, чт� ����ательны� �вл�ет�� �дин лишь ар�у�ент prompt. В�е дру�ие ар�у�енты ���а�аны в ��ружении �вадратных ������, ��эт��у �ни �вл�ют�� не����ательны�и. Наи�р��тейша� ф�р�а и���ль��вани� MsgBox ��жет и�еть �ледующий вид: x = MsgBox("Это сообщение выводится на экран") Н� фун�цию MsgBox ��жн� и���ль��вать и � тре�� ар�у�ента�и: x = MsgBox("Это сообщение выводится на экран", vbOK, "Это заголовок") Е�ли нужн� у�а�ать не��т�рые ар�у�енты, не у�а�ыва� их �редше�твенни��в, ��жн� в����ль��вать�� �а��ты�и, ниче�� не ра��еща� �ежду ни�и. На�ри�ер, дл� у�а�ани� ар�у�ент�в на���инани� ( prompt� и �а��л�в�а (title�, не у�а�ыва� �н���� (buttons�, ��жн� на�и�ать �ледующий ��д: x = MsgBox("Это сообщение выводится на экран",, "Это заголовок") В данн�� �лучае �р��ра��а, в ��т�р�й и���ль�ует�� фун�ци� MsgBox, �ри�ен�ет дл� ар�у�ента buttons �начение �� у��лчанию. И на��нец, �ледует �а�етить, чт� ар�у�енты файла ����щи (helpfile� и ��нте�� �та (context� ��ружены �дни� на��р�� �вадратных ������, чт� �видетель�твует � т��, чт� ��жн� ли�� и���ль��вать ��а ар�у�ента, ли�� не у�а�ывать ни �дн��� и� них. Не �тарайте�ь на данн�� эта�е �а���нить а���лютн� в�е детали. Эти �ри�еры �риведены в ��н�вн�� дл� т���, чт��ы ���а�ать, �а� у�тр�ена д��у�ентаци�. Функции работы со строками С��рее в�е��, ��н�вн�й ��ъе� ра��ты, дл� ��т�р�й ва� ��над��ит�� V�S���p�, �удет �а�ать�� ра��ты �� �тр��а�и, на�ри�ер � и�ена�и файл�в и ��ль��вателей. П�эт��у �чень х�р�ш�, чт� V�S���p� щедр� д���лнен в�тр�енны�и фун�ци��и дл� ра��ты �� �тр��а�и. Поиск в строках с помощью функций InStr() и InStrRev() О�а�ал��ь, чт� наи��лее ча�т� вы��лн�е��й �адачей �ри ра��те �� �тр��а�и дл� �ен� �ыл� ��ределение наличи� �а��й�ни�удь �тр��и в дру��й �тр��е. На�ри�ер, е�ли ваш �ценарий ��анирует ��держи��е �атал��а в ��и��е файл�в � ра�шире� ние� D AT , т� нужен ������ ��наружени�, �ри�ут�твует ли �тр��а «.DAT» в лю��� �тдельн� в��т�� и�ени файла. Эту ра��ту вы��лн�ет фун�ци� InStr. Выражение InStr(filename, ". DAT ") �рини�ает �начение 0, е�ли �тр��а .DAT не ��жет �ыть найдена в �начении �тр���� в�й �ере�енн�й filename. Е�ли та�а� �тр��а в �начении �ере�енн�й �ри�ут�твует,
Функции VBScript 91 выражение �рини�ает �начение, ���твет�твующее ���иции, � ��т�р�й начинает�� .D A T. Ра����три� �ри�ер: filename = "TEST.DAT" pos = InStr(filename, ". DAT ") В данн�� �лучае �ере�енна� pos ��лучает �начение 5, ��т��у чт� . DAT в filename начинает�� � ��т��� �и�в�ла. Е�ли �тр��а .DAT не �удет �ри�ут�тв�вать в �начении �ере�енн�й filename, �ере�енна� pos ��лучит �начение 0. В �р��ра��е эти� ��жн� в����ль��вать�� �ледующи� ��ра���: if InStr(filename, ". DAT ") > 0 then msgbox filename & " является файлом .DAT!" end if Следует ���нить, чт� фун�ци� InStr чув�твительна � ре�и�тру �и�в�л�в. На� �ри�ер, «.DAT» не ��жет �ыть найдена в �тр��е «som�����.d��». П�эт��у, ���да filename ��жет ��держать �и�в�лы �а� в верхне� та� и в нижне� ре�и�тре, �ра� вильнее �ыл� �ы �р�ве�ти �р�вер�у �ледующи� ��ра���: if InStr(Ucase(filename), " .DA T") > 0 then Фун�ци� UCase в��вращает �тр��у, идентичную т�й, ��т�ра� ей �ыла �ередана, н� �и�в�лы нижне�� ре�и�тра в ней �ре��ра��ваны в �и�в�лы верхне�� ре�и�тра. Зате� фун�ци� InStr ведет ��и�� �тр��и .DAT, ���т��щей и� �и�в�л�в верхне�� ре�и�тра. ▼▼ При работе со строками нужно постоянно учитывать регистр символов. Для компьютера буквы «a» и «A» отличаются друг от друга. При ра��те � данны�и в�е�да нужн� ду�ать � �ри�ут�твии в них �и�в�л�в верх� не�� и нижне�� ре�и�тра. О�ычн� �еред �р�вер��й �рих�дит�� ��нвертир�вать ве�ь те��т, введенный ��ль��вателе�, и и�ена файл�в в верхний или нижний ре�и�тр, в �р�тивн�� �лучае �ридет�� �рать в ра�чет ре�и�тр �и�в�л�в. Е�ли �ервы� ар�у�ент�� фун�ции InStr �вл�ет�� чи�л�в�е �начение, �н� ин� тер�ретирует�� в �аче�тве ���иции �и�в�ла, � ��т�р��� начинает�� ��и��. В эт�� �лучае фун�ции InStr нужн� �ередать три ар�у�ента. Следующее выражение в��вращает �начение 4: InStr(2, "ABCABC", "AB") Стр��а «A�» ���вл�ет�� в �тр��е «A�CA�C» в ���ици�х 1 и 4, н� фун�ции In- Str �ред�и�ан� начать ��и�� � ���иции 2. П�эт��у �ерв�е ���вление �р��у��ает��. Фун�ци� InStrRev() ��х�жа на фун�цию InStr(), �а и��лючение� т���, чт� �на ведет ��и�� � �рав��� �ра� �тр��и. Следующий ��д вернет 4, ��т��у чт� найдет �а��е �рав�е �тр���в�е �начение «A�»: InStrRev("ABCABC", "AB ") Извлечение части строки с помощью функций Left(), Right() и Mid() В V�S���p� и�еет�� не���ль�� фун�ций и�влечени� ча�тей �тр�� на ��н�ве на� чальн�й ���иции и длины тре�уе���� фра��ента.
92 Глава 2. Руководство по VBScript Функция Возвращаемое значение Left(строка, длина) Са�ые левые �и�в�лы, и�влеченные и� �тр��и Right(строка, длина) Са�ые �равые �и�в�лы, и�влеченные и� �тр��и Mid(строка, начальная_позиция) Ча�ть �тр��и � �и�в�ла, у�а�анн��� в начальн�й ��� �иции и далее д� ��нца �тр��и Mid(строка, начальная_позиция, длина) К�личе�тв� �и�в�л�в, у�а�анн�е в длине, и�влеченн�е � у�а�анн�й начальн�й ���иции Ра����три� не���ль�� �ри�ер�в. Выражение Возвращаемое значение Left("ABCDEF ", 3) "A BC" Right("ABCDEF", 3) "D EF" Mid("ABCDEF", 3) "CDEF" Mid("ABCDEF", 3, 2) "C D" В реальн�й �итуации эти фун�ции �удут и���ль��вать�� � �ере�енны�и, а не � фи��ир�ванны�и �тр��а�и, �а� «A�C». На�ри�ер, дл� ��ределени� �а��в��� и�ени файла �е� ти�а файла или е�� ра�ширени� ��жн� в����ль��вать�� �леду� ющи� ��д�� V�S���p�: filename = "My file.DAT" ' присваивание имени файла переменной dot = InStrRev(filename, ". ") ' поиск самой правой . в имени basename = Left(filename, dot-1) ' базовое имя всегда ПЕРЕД . Эт�т ��д �ри�ваивает �ере�енн�й dot чи�л�, ��редел�ющее ���ицию �и�в�ла т�ч�и, � ��т�р��� начинает�� та ча�ть и�ени файла, � ����щью ��т�р�й ��редел�� ет�� е�� ти�. Дл� ��и��а эт�й ���иции и���ль�ует�� фун�ци� InStrRev, �����ль�у у и�ени файла ��жет �ыть ��лее �дн�й т�ч�и, на�ри�ер, file.doc.txt — в��лне д��у�ти��е и��, ��т��у чт�, е�ли в и�ени файла ��лее �дн�й т�ч�и, нужн� �а� рантир�вать нах�ждение �а��й ���ледней и� них. Зате� в �ценарии �ере�енн�й basename �ри�ваивает�� �начение т�й ча�ти и�ени файла, ��т�ра� нах�дит�� д� найденн�й т�ч�и, н� не в�лючает ее. В �риведенн�� �ри�ере �ере�енн�й basename �удет �ри�в�ен� �начение My file. (Е�ли в��ни�нут ���нени�, ��жете у�едить�� в �рав�те ��а�анн���, �р�делав в�ю эту ра��ту � �арандаш�� и �у�а��й.� Чт� же �р�и��йдет, е�ли т�ч�а в���ще �т�ут�твует в и�ени файла? В��ни�нет �р��ле�а: �ере�енна� dot ��лучит нулев�е �начение, и V�S���p� �ри ���ыт�е �ри�в�ить �ере�енн�й basename �начение, ��держащее �а�ые левые �и�в�лы �а вычет�� �дн���, �ре�ратит ра��ту � выдачей ����щени� �� �ши��е! Пра�ти�а �р��ра��ир�вани� �ред�и�ывает ��равл�ть�� � данн�й �итуацией �ледующи� ��ра���. ШАБЛОН Для извлечения базового имени из полного имени файла с расширением используется следую- щая последовательность операторов:
Функции VBScript 93 ' Файл примера script0208.vbs filename = "test.file" ' присваивание имени файла переменной dot = InStrRev(filename, " .") ' пои ск сам ой правой точки (.) в имени ifdot=0then basename = filename ' Символ . отсутствует, берем имя целиком else basename = Left(filename, dot-1) ' базовое имя всегда ПЕРЕД точкой (.) end if MsgBox "Базовое имя — " & basename Не�л�х� �удет �а�у�тить эт�т улучшенный �ценарий � filename = "xxx" и � filename = "xxx.yyy .zzz", чт��ы у�едить�� в е�� ра��т�������н��ти не�ави�и� �� �т ��личе�тва т�че�, ��держащих�� в и�ени. Другие строковые операции Следующие фун�ции та�же �ри��д�т�� ва� дл� ра��ты �� �тр��а�и. Функция Возвращаемое значение Len(строка) Длина �тр��и в �и�в�лах Lcase(строка) Та же �а�а� �тр��а, н� �� в�е�и алфавитны�и �и�в�ла�и в ниж� не� ре�и�тре Ucase(строка) Стр��а �� в�е�и алфавитны�и �и�в�ла�и в верхне� ре�и�тре Trim(строка) Стр��а � удаленны�и лидирующи�и и �а�ы�ающи�и �р��е� ла�и Ltrim(строка) Стр��а � удаленны�и лидирующи�и �р��ела�и Rtrim(строка) Стр��а � удаленны�и �а�ы�ающи�и �р��ела�и Ра����три� не���ль�� �ри�ер�в. Выражение Возвращаемое значение Len("ABC") 3 Lcase("My Documents") "my documents" Ucase("My Documents") "MY DO CUM ENT S" Trim(" ABC ") "AB C" Ltrim(" ABC ") "ABC " Rtrim(" ABC ") " ABC" Преобразование строк в другие типы данных, и наоборот В V�S���p� и�еет�� на��р фун�ций, ���в�л�ющие ��нвертир�вать �тр��и в данные дру�их ти��в. Б�льшин�тв� этих фун�ций ��жет �рини�ать ар�у�енты лю���� ти�а и ��нвертир�вать их в дру��й у�а�анный ти�. Са�ы�и ��ле�ны�и и� них ��жн� �читать �ледующие.
94 Глава 2. Руководство по VBScript Функция Возвращаемое значение cstr(значение) Стр���в�е �ред�тавление �начени�. И���ль�ует�� дл� �ревра� щени� чи�ла или �начени� даты�вре�ени в те��т�вую �тр��у. На�ри�ер, cstr(47) в��вращает �тр��у 47 clng(значение) Длинн�е (32�ра�р�дн�е� цел�е чи�л�. И���ль�ует�� дл� �ре� вращени� �тр���в��� �ред�тавлени� чи�ла в чи�л�в�е �начение. На�ри�ер, clng("47 ") в��вращает цел�е чи�л� 47 cdbl(значение) Значение чи�ла � �лавающей т�ч��й дв�йн�й т�чн��ти. И���ль� �ует�� дл� �ревращени� �тр���в��� �ред�тавлени� чи�ла в чи�л� � �лавающей т�ч��й. На�ри�ер, cdbl("1.23") в��вращает 1.23 cdate(значение) Значение даты�вре�ени. И���ль�ует�� дл� �ревращени� те�� �т�в�й �тр��и, �ред�тавл�ющей дату или дату�вре�� в �начение даты�вре�ени. На�ри�ер, cdate ("10-Jan-2011 11:30 AM") в��� вращает ���твет�твующее �начение даты�вре�ени chr(значение) В��вращает �дн��и�в�льную �тр��у, ��держащую �и�в�л, ���т� вет�твующий цел�чи�ленн��у �начению ��да ASCII asc(строка) В��вращает �начение ��да ASCII �ерв��� �и�в�ла �тр��и Е�ть и дру�ие фун�ции ��нвертир�вани�. Их ��лный �еречень �риведен в ��ра� в�чн�� �атериале ����ании M���oso�� �� V�S���p� ��д �а��л�в��� Fu����o�s. Функции даты-времени Дл� ва�, наверн�е, не �удет не�жиданн��тью, чт� в V�S���p� и�еет�� р�д в�тр�� енных фун�ций дл� ��ле�чени� ра��ты � данны�и даты и вре�ени, �����ль�у ����ьютеры д�в�льн� ча�т� ��ылают�� на эти данные. Считывание показаний системных часов с помощью функций Date(), Time() и Now() Фун�ции Date() и Time() в��вращают ���твет�твенн� те�ущую �алендарную дату и вре�� л��альных �и�те�ных ча��в, ��т�рые ��редел�ют�� ��ераци�нн�й �и�те��й. На�ри�ер, дл� �т��ражени� те�ущей даты и вре�ени в ��не ����щени� ��жн� в����ль��вать�� �ледующи� ��д��: ' Файл примера script0209.vbs MsgBox "Текущая дата: " & Date() & " и время: " & Time() Фун�ци� Now() в��вращает ��четание те�уще�� вре�ени и даты. ▼) Использование оператора & для объединения строк с функцией, возвращающей даты, может показаться странным, но это одна из весьма изящных особенностей VBScript. Поскольку ин- VBScript. Поскольку ин- . Поскольку ин- терпретатору известно, что символ & всегда работает со строками, он «понимает», что нужно конвертировать значения даты и времени в их строковые представления. Значени� даты и вре�ени хран�т�� в виде чи�ел. Значение даты хранит�� в виде цел��� чи�ла дней, �р�шедших � 1 �нвар� 0099 ��да, а �начени� вре�ени хран�т��
Функции VBScript 95 в виде де��тичн�й др��и дней (1 �е�унда равна 0,0000115741�. Бе�����ить�� � т��, �а� эт� делает��, ��вершенн� и�лишне, н� �нать �� эт�� ��ле�н�, �����ль�у эт� ���в�лит ра��тать � дата�и, и���ль�у� ариф�етиче��ий ��ерат�р +. На�ри�ер, �ледующий ��д �ри�ваивает �е��дн�шнюю дату �лю� �дин день �ере�енн�й, ���� �начающей �автрашний день — tomorrow: tomorrow = date()+1 Н� в�е же лучше в����ль��вать�� ��ециальны�и в�тр�енны�и фун�ци��и вычи�лени� даты и вре�ени, �ред��тавл�е�ы�и V�S���p�, ��т�рые �удут ра����� трены далее в эт�й �лаве. Вычисление будущей даты с помощью функции DateAdd И���ль�у� фун�цию DateAdd, ��жн� �ри�авл�ть � �аданны� дате, вре�ени или � ��четанию даты�вре�ени у�а�анные интервалы. Дл� эт�й фун�ции и���ль�ует�� �ледующий �инта��и�: DateAdd(интервал, количество, дата) Ар�у�ент дата и���ль�ует�� дл� �адани� и�х�дн�й даты. Ар�у�ент интервал �вл�ет�� ти��� интервала, на�ри�ер, �е��ц, день или ��д, а ар�у�ент количество �вл�ет�� ��личе�тв�� �ри�авл�е�ых интервал�в. С�и��� ти��в интервал�в �ред� �тавлен в та�л. 2 .5 . Они д�лжны �ыть �ереданы фун�ции DateAdd в виде �тр��и, �а�люченн�й в �авыч�и. Таблица 2.5. Типы интервалов для функции DateAdd() Интервал Описание YYYY Г�ды Q Кварталы M Ме��цы W Недели D Дни H Ча�ы N Минуты S Се�унды Ра����три� не���ль�� �ри�ер�в. Выражение Возвращаемое значение DateAdd("M", 2, Date()) Се��дн�шн�� дата �лю� два �е��ца DateAdd("H", -1, Time()) Те�ущее вре�� �ину� �дин ча� Функция DateDiff() Фун�ци� DateDiff() вычи�л�ет интервал �ежду дву�� дата�и. Дл� нее и���ль�у� ет�� �ледующий �инта��и�: DateDif(интервал, дата1, дата2)
96 Глава 2. Руководство по VBScript Ар�у�ент интервал ��и�ывает ф�р�ат т��� ре�ультата, ��т�рый нужн� вернуть. Е�� �начени� �риведены в та�л. 2 .5 . На�ри�ер, DateDiff("D", "9/9/1999", "1/2/2001") в��вращает ��личе�тв� дней �ежду 9 �ент��р� 1999 ��да и 2 �нвар� 2001 ��да. Эта фун�ци� ����енн� ��ле�на в �ценари�х, вычи�л�ющих в��ра�т файл�в. На�ри�ер, ��жет ��тре��вать�� удалить �аданный файл, е�ли �н �тарше трех ча��в. Е�ли �ере�енна� timestamp ��держит дату и вре�� ���ледне�� и��енени� файла, т� �ледующа� �р�вер�а ��ределит, ��длежит данный файл удалению или нет: if DateDiff("H", timestamp, time()) > 3 then Другие функции работы с датами Далее ���а�ан еще р�д фун�ций даты и вре�ени, � �уще�тв�вании ��т�рых �ле� д�вал� �ы �нать. Функция Возвращаемое значение Day(дата) День �е��ца �аданн�й даты в диа�а��не �т 1 д� 31 Weekday(дата) День недели �аданн�й даты в виде чи�ла �т 1 д� 7, �де 1 ���твет�твует в���ре�енью, 2 — ��недельни�у и т. д . Month(дата) Ме��ц �аданн�й даты, �де 1 ���твет�твует �нварю и т. д. WeekdayName(дата) День недели �аданн�й даты, в��вращенный в виде �тр��и MonthName(дата) На�вание �е��ца, в ��т�рый ���адает �аданна� дата Hour(время) Ча� (�т 0 д� 23� �аданн��� вре�ени Minute(время) Минута (�т 0 д� 59� �аданн��� вре�ени Second(время) Се�унда (�т 0 д� 59� �аданн��� вре�ени Date(время) С ар�у�ент�� фун�ци� Date в��вращает т�ль�� ту ча�ть �начени� даты�вре�ени, ��т�ра� �тн��ит�� � дате, фа�� тиче��и ��лн�чь у�а�анн�й даты. (Бе� ар�у�ента фун�� ци� Date в��вращает �е��дн�шнюю дату� Time(время) С ар�у�ент�� фун�ци� Time в��вращает т�ль�� ту ча�ть �начени� даты�вре�ени, ��т�ра� �тн��ит�� � вре�е� ни. (Бе� ар�у�ента фун�ци� Time в��вращает те�ущее вре��� В V�S���p� и�еют�� �ред��ределенные ��н�танты �� �начени��и дней недели vbSunday, vbMonday и т. д., ��т�рые ��жн� и���ль��вать дл� �р�вер�и �начений, в��вращае�ых фун�цией Weekday в If и дру�их ��ерат�рах. К�н�танта vbMonday и�еет ��лее выра�ительный вид, че� чи�л� 2 дл� тех, �т� не�на��� � данн�й фун�� цией. Ра����три� р�д �ри�ер�в �начений, в��вращае�ых V�S���p�, ���да выра� жение вычи�л�ет�� в 3:10:37 ���ле ��лудн� (в 15:10:37� в� вт�рни�, 11 �нвар� 2000 ��да.
Функции VBScript 97 Выражение Возвращаемое значение Day(now()) 11 Weekday(now()) 3 (дл� вт�рни�а� Month(now()) 1 (дл� �нвар�� WeekdayName(Weekday(now())) "в торник" MonthName(Month(now())) "Январь" Hour(now()) 15 Minute(now()) 10 Second(now()) 37 Приемы работы с датами Ра����три� р�д �рие��в ра��ты � дата�и, ��т�рые � ча�т� и���ль�ую дл� вычи�� лени� �ерв��� и ���ледне�� дней �аданн��� �е��ца. Они ���ут ва� �ри��дить��, ���да ��тре�ует�� на�и�ать �ценарий, ��т�рый, � �ри�еру, нужен дл� ��наружени� в�ех файл�в, ���данных в течение �редыдуще�� �е��ца. Прие� ��н�ван на т�� фа�те, чт� дл� лю���� �начени� даты dt выражение dt - Day(dt) в��вращает ���ледний день �редыдуще�� �е��ца. На�ри�ер, е�ли dt — эт� �ервый день лю���� �е��ца, dt - 1 в��вращает �редыдущий день, ��т�рый �вл�ет�� ���ледни� дне� �редыдуще�� �е��ца. Т� же �а��е �р�и�х�дит дл� вт�р��� дн� �е��ца: dt - 2 ���ть�та�и в��вращает ���ледний день �редыдуще�� �е��ца. Эт�т �ринци� ��тает�� ��раведливы� в���ще дл� лю��й даты, не�ави�и�� �т т���, ���ль�� в�е�� дней в �е��це. Е�ли ��жн� ��ределить ���ледний день �редыдуще�� �е��ца, т� �ате� ��жн� вычи�лить начальную и ��нечную даты �редыдуще�� �е��ца. Ра����три� �ри�ер: ' Файл примера dates.vbs prev_m _last = Date() - Day(Date()) ' пос ледний день предыдущего ' мес яца prev_m _first = prev_m _last - Day(prev_m _last) + 1 ' переход к первому дню ' предыдущего месяца this_m _first = Date() - Day(Date()) + 1 ' первый день этого месяца this_m _last = this_m_first+40 ' гарантированный переход ' в следующий месяц this_m_last = this_m_last - Day(this_m_last) ' зат ем воз вращение ' к пос леднему дню ' те кущего месяца next_m_first = Date() - Day(Date()) + 40 ' гарантированный переход ' в с ледующий месяц next_m_first = next_m_first - Day(next_m_first) + 1 ' затем возвращение ' к п ервому дню следующего ' мес яца next_m_last = next_m_first + 40 ' г арантированный переход ' в с ледующий за ним месяц next_m_last = next_m_last - Day(next_m_last) ' воз вращение к концу ' сл едующего месяца
98 Глава 2. Руководство по VBScript (За�ружае�а� вер�и� эт��� �ценари� в�лючает ��ерат�ры wscript.echo, ���а� �ывающие ре�ультаты, а �де�ь ���а�ан ���ращенный вариант.� Эти �рие�ы ����енн� ��ле�ны �т�ут�твие� не��х�ди���ти учета ��личе�тва дней в �ажд�� �е��це. При вычи�лении эт��� �нать не нужн�. Н� нужн� ���лю� дать ��т�р�жн��ть в дру���. Даты, вычи�ленные эти�и выражени��и, е�ли �ни интер�ретируют�� �а� дата�вре��, фа�тиче��и у�а�ывают на ��лн�чь �аданн�й даты. Е�ли, ��аже�, вы ���ираете�ь и���ль��вать их дл� �т��ра файл�в, ���дан� ных в �аданн�� диа�а��не дат, �ледует �р��вить ����ую ����трительн��ть. Эта �р�вер�а if file_time >= prev_m_first and file_time <= prev_m_last then не да�т в����жн��ти �т��рать ��льшин�тв� файл�в, ���данных в ���ледний день �е��ца, ��т��у чт� �начение �ере�енн�й prev_m_last фа�тиче��и �ред�тавл�ет ����й ��лн�чь ���ледне�� дн�, 23 ча�а, 59 �инут и 59 �е�унд, т� е�ть ���а�атель, �ли��ий � на�т��ще�у ��нцу �е��ца. Дл� файла, ���данн���, ��аже�, в 15 ча��в ���ледне�� дн�, �начение �ере�енн�й file_time �удет ��льше, че� �начение �ере� �енн�й prev_m _last, и �р�вер�а ���людени� у�л�ви� if �риведет � т��у, чт� эт�т файл не ���адет в ��и���. Дл� ��рре�тн�й ��д��р�и в�ех дат диа�а��на ��жн� у�тр�ить �ледующую �р�вер�у: if file_time >= prev_m_first and file_time < (prev_m_last+1) then Не��льша�, н� ве�ь�а важна� ��рре�тир�в�а! В эт�й вер�ии ��ерат�ра if ведет� �� �р�вер�а дл� файл�в, ���данных перед полуночью дня после окончания нужного диапазона, ��эт��у в вы��р�у в��лне ре��нн� ���адает файл, ���данный в лю��е вре�� ���ледне�� дн�. В�е�т� эт��� ��жн� �а�тавить V�S���p� �р�верить т�ль�� лишь ту ча�ть �т� �ет�и вре�ени ���дани� файла, ��т�ра� �тн��ит�� � дате: if Date(file_time) >= prev_m_first or Date(file_time) <= prev_m _last then Та��й вариант та�же �удет ра��тать �а �чет и�ъ�ти� ча�ти «вре��» и� �начени� �ере�енн�й file_time. Взаимодействие с пользователем V�S���p� не ра�ра�атывал�� дл� на�и�ани� �р��ра�� �� �л�жны� ��ль��ва� тель��и� интерфей���, н� �н ��жет выв�дить �р��тые ����щени� и ��лучать �т ��ль��вател� �р��тые �тр��и вв�да � ����щью и�еющих�� у не�� фун�ций MsgBox и InputBox. ▼) Кроме этого, сценарии могут читать и записывать файлы, а также общаться посредством окна командной строки, используя объект TextFile, рассматриваемый в главе 4 «Доступ к файлам и реестру». В данной главе рассматриваются только основные методы ввода-вывода, имею- щиеся в VBScript.
Взаимодействие с пользователем 99 Функция MsgBox() В �в�ей наи��лее ��щей ф�р�е фун�ци� MsgBox выв�дит те��т ����щени� ��ль��� вателю. На�ри�ер, �ледующий ��д ��уще�твл�ет выв�д, ���а�анный на ри�. 2 .2: ' Файл примера script0210.vbs MsgBox "Это сообщение было выведено VBScript в " & time() Рис. 2 .2 . Основное окно сообщений, в котором выведена строка для пользователя сценария Фун�цию MsgBox ��жн� та�же и���ль��вать дл� �р��тых в��р���в ��ль��вате� лю �ценари�, на ��т�рые �ред��ла�ает�� �твет «да» или «нет». Чт��ы �адать та��й в��р��, и���ль�ует�� ра�ширенна� ф�р�а фун�ции MsgBox, и�еюща� �ледующий �инта��и�: MsgBox(вопрос [, кнопки][, заголовок]) Зде�ь и���ль�уют�� �ледующие три ар�у�ента: y y вопрос ��редел�ет �т��ражае�ый те��т; y y кнопки ��редел�ют те �н���и, ��т�рые �удут �редл�жены ��ль��вателю; y y заголовок �вл�ет�� те��т�вы� �а��л�в���, �т��ражае�ы� в верхней ча�ти диа� л���в��� ��на, ��т�р�е выв�дит�� в ре�ультате вы��лнени� фун�ции. Ар�у�енты кнопки и заголовок ��жн� ��у�тить, в �лучае их �т�ут�тви� V�S���p� выведет �н���у OK и �а��л�в�� «V�S���p�». Значение ар�у�ента �н���и д�лжн� �ыть в��т� и� �еречн�, �риведенн��� в та�л. 2 .6 . М�жн� в����ль��вать�� и�ене� ��н�танты или чи�л�вы� �начение�. Таблица 2.6. Выбор кнопок для функции MsgBox() Имя константы Значение Отображаемые кнопки VbOKOnly 0 OK VbOKCancel 1 OK и Отмена (C������ VbAbortRetryIgnore 2 Прервать (Abo���, Повтор (R���y� и Про- пустить (Ig�o��� VbYesNoCancel 3 Да (Y�s�, Нет (No� и Отмена (C������ VbYesNo 4 Да (Y�s� и Нет (No� VbRetryCancel 5 Повтор (R���y� и Отмена (C������
100 Глава 2. Руководство по VBScript В����ль��вавши�ь, � �ри�еру, �ледующи� ��д��, ��жн� ����щить ��ль��ва� телю, чт� �а�р�шенный файл не найден, и ��р��ить, нужн� ли �р�д�лжить ра��ту: choice = _ MsgBox("Файл персональных настроек отсутствует, продолжить работу?", vbYesNo) Фун�ци� MsgBox в��вращает ли�� �начение vbYes, ли�� �начение vbNo, в �ави�и� ���ти �т т���, на �а��й �н���е �ыл �р�и�веден щелч��. В����жные в��вращае�ые фун�цией MsgBox �начени� �еречи�лены в та�л. 2.7 . Они ���а�ывают, �а�а� и� �н���� �ыла вы�рана ��ль��вателе�. Таблица 2.7. Значения, возвращаемые функцией MsgBox() Имя константы Значение VbOK 1 VbCancel 2 VbAbort 3 vbRetry 4 vbIgnore 5 VbYes 6 VbNo 7 Нар�ду � ����щение�, �т V�S���p� ��жн� ��тре��вать �т��ражени� �нач�а, д�� V�S���p� ��жн� ��тре��вать �т��ражени� �нач�а, д�� ��жн� ��тре��вать �т��ражени� �нач�а, д�� �авив � ар�у�енту кнопки еще �дн� �начение и� �еречн�, �риведенн��� в та�л. 2 .� . Таблица 2.8. Значения значков, используемых в функции MsgBox() Имя константы Значение Отображаемый значок VBCritical 16 Важн�е ����щение VBQuestion 32 В��р�� VbExclamation 4� В���лицание VBInformation 64 Инф�р�аци� Следующий ��д выв�дит ����щение �� �нач��� Инф�р�аци�: ' Файл примера script0211.vbs x=33 MsgBox "Переменная x имеет значение " & x, vbOKOnly + vbInformation,_ "Отладочная информация" Ре�ультат ���а�ан на ри�. 2.3. Вы��р �нач�а vbInformation та�же �а�тавл�ет W��dows ��давать ��ециальный �ву��в�й �и�нал «Инф�р�аци�»; чт��ы е�� у�лы� шать, нужн� �а�у�тить уче�ный �ценарий. Ин��да нужн�, чт��ы фун�ци� MsgBox выв�дила �а�ие�ни�удь интере�ные ��� ��щени�, н� �ри эт�� �ыл� �ы а���лютн� �е�ра�личн�, на �а��й и�енн� �н���е щел�нул ��ль��ватель или �а��е �начение вернула фун�ци� MsgBox. В та��� �лучае �ри вы��ве MsgBox �ру�лые �����и нужн� ��у�тить. Эт�т в��р�� уже ра���атри� вал�� в данн�й �лаве в ра�деле «Вы��в фун�ций и ��д�р��ра��».
Взаимодействие с пользователем 101 Рис. 2 .3. Результат работы функции MsgBox с заголовком и значком ▼) Функцию MsgBox можно использовать для отображения содержимого переменных и значений внутри программы для облегчения ее отладки. Например, если в самом начале вашей програм- мы присвоить значение переменной debug = True то по всей программе можно будет добавлять средства отладки, подобные следующему: if debug then MsgBox "Значение переменной x равно " & x Когда удастся добиться от программы приемлемой работы, можно будет отключить все отла- дочные сообщения, поменяв первую строку программы на следующую: debug = False Особую пользу это принесет при работе с отладчиком WSH, которая рассмотрена в конце гла- WSH, которая рассмотрена в конце гла- , которая рассмотрена в конце гла- вы 1 «Windows Script Host». Отладчик покажет, какой оператор вашего сценария был запущен, а оператор MsgBox сможет показать содержимое важных переменных. Фун�ци� MsgBox выв�дит диал���в�е ��н�, ��т�р�е ��тает�� на э�ране, ���а ��ль��ватель не щел�нет на �н���е. Ее не �ледует и���ль��вать в �ценарии, ��� т�р��у нужн� ра��тать в авт��атиче���� режи�е! Ваш �ценарий ни���да не �а� вершит��, �����ль�у �удет ждать реа�ции ��ль��вател�, не ��ращающе�� на не�� ни�а���� вни�ани�. Е�ли нужн� выве�ти инф�р�ацию �е� ��тан�в�и ра��ты �ценари�, ��жн� в��� ��ль��вать�� ��ерат�р�� Wscript.Echo, ��т�рый �удет ра����трен в �ледующе� ра�деле. Функция InputBox() V�S���p� ���в�л�ет ���р��ить ��ль��вателей вве�ти �р��тую те��т�вую �тр��у. Дл� эт��� и���ль�ует�� фун�ци� InputBox: ' Файл примера script0212.vbs UserName = InputBox("Введите, пожалуйста, свое имя ") MsgBox "Привет, " & UserName Эт�т �ценарий выведет диал���в�е ��н� дл� на��ра вв�ди�ых данных, ���а� �анн�е на ри�. 2 .4 . Фун�ци� в��вращает �начение, введенн�е ��ль��вателе�. В ���а�анн�� выше �ри�ере эт� �начение ��хран�ет�� в �ере�енн�й UserName. Ка� и �ри вы��ве MsgBox, �ри вы��ве фун�ции InputBox ��жн� д��авить ар�у� �енты, у�равл�ющие ее внешни� вид��. Дл� эт��� ��жн� и���ль��вать не���ль��
102 Глава 2. Руководство по VBScript вариант�в ар�у�ент�в, наи��лее интере�ны�и и� ��т�рых �ред�тавл�ют�� �леду� ющие: InputBox(приглашение, заголовок, умолчание) Рис. 2 .4 . Работа функции InputBox(), демонстрируемая пользователю Зде�ь приглашение �вл�ет�� ����щение�, �т��ра жае�ы� над ��ле� вв�да, за головок �вл�ет�� �а��л�в���, �т��ражае�ы� в верхней ча�ти диал���в��� ��на, а умолчание ���ещает у�а�анную �и�в�льную �тр��у в реда�тируе��е ��ле �ри �ерв�� е�� ���влении; �ате� ��ль��ватель ��жет �рин�ть эт� �начение или вне�ти в не�� и��енени�. На �ра�ти�е фун�цию InputBox ��жн� �ри�енить дл� вы��ра �а��и, ��ра�а� тывае��й �ценарие�: fldr = InputBox("Введите имя очищаемой папки", "Сценарий Очищение", "C:\TEMP") V�S���p� �р��вл�ет ве�ь�а ��льшую �и����ть в �тн�шении ти��в данных, храни�ых в е�� �ере�енных: е�ли ��ль��ватель введет 23, �начение, в��вращенн�е фун�цией InputBox, ��жет ра���атривать�� в �аче�тве чи�ла или �тр��и. Ра����три� д�в�льн� ��ле�ный �ценарий дл� вычи�лени� �вадратных ��р� ней (� уверен, чт� ва�, ��р�й, �рих�дит�� эти� �ани�ать�� �� не���ль�у ра� �а день�: do num = InputBox("Введите число", "Вычислитель квадратного корня", "0") ifnum<0then MsgBox "Нельзя извлечь квадратный корень из отрицательного числа " & _ num, VbOKOnly+VbExclamation elseif num = 0 then exit do ' в вод нуля завершает работу программы else MsgBox "Квадратный корень из " & num & " равен " & sqr(num), VbOKOnly end if loop Е�ли ��ль��ватель введет �а��е�ни�удь нечи�л�в�е �начение, на�ри�ер «XYZ», эт�т �ценарий да�т ���й � выв�д�� ����щени� �� �ши��е. Лучше в�е�да �р�вер�ть ��ль��ватель��ий вв�д на д��у�ти���ть, чт��ы �р��ра��а или ����щала � нед�� �у�ти��� вв�де, или, �� �райней �ере, вела �е�� �а��т� �� �����енн��у.
Взаимодействие с пользователем 103 Реали��вать эт�т �а�ы�ел ��жн� �ледующи� ��ра���. ШАБЛОН Когда у пользователя запрашивается ввод числа или даты, то для подтверждения допустимо- сти введенного значения используется функция IsNumeric(), или функция IsDate(): ' Файл примера script0213.vbs do num = InputBox("Введите число", "Вычислитель квадратного корня ", "0") if not IsNumeric(num) then MsgBox "Разве это число?" elseif num < 0 then MsgBox _ "Нельзя извлечь квадратный корень из отрицательного числа " & _ num, VbOKOnly+VbExclamation elseif num = 0 then exit do ' ввод нуля завершает работу программы else MsgBox " Квадратный корень из " & num & " равен " & _ sqr(num), VbOKOnly end if loop Фун�ци� InputBox �т��ражает �н���у Отмена (C������. Е�ли ��ль��ватель щел�ает на �н���е Отмена (C������, а не на �н���е OK, фун�ци� InputBox в��вра� щает �у�тую �тр��у (""�. О�наружить эт� ��жн� � ����щью �ледующе�� ��ера� т�ра: str = InputBox("Введите, пожалуйста, свое имя:") if len(str) = 0 then ... Зате� ��жн� ���твет�твующи� ��ра��� �треа�ир�вать на эт�, выйд� и� �це� нари�, �авершив ци�л и т. д . В вычи�лителе �вадратн��� ��рн� �итуаци� ��лады� вает�� та�, чт� �у�та� �тр��а ��дх�дит ��д �р�вер�у, ��уще�твл�е�ую фун�цией IsNumeric, и вычи�л�ет�� в нуль, ��эт��у вычи�литель �равильн� реа�ирует на щелч�� на �н���е Отмена (C������, не тре�у� �вн�й �р�вер�и на наличие �у�т�й �тр��и. Вывод простых текстовых сообщений с помощью метода Wscript.Echo При �тлад�е �лиш��� �а�ри�н��� �ценари� в не��т�рые ���енты нужн� ������ треть, чт� хранит�� в е�� �ере�енных �ри вы��лнении �р��ра��ы. Н� е�ли нужн� выве�ти �тлад�чную инф�р�ацию и� ци�ла или нужн� выве�ти �начени� де��т��в �ере�енных, а дл� эт��� и���ль�ует�� фун�ци� MsgBox, ва� �чень ���р� над�� е�т щел�ать ра� �а ра��� на �н���е OK. Е�ть ��лее ��дх�д�щий ������: ��ерат�р Wscript.Echo ��жет выве�ти те��т, не ��танавлива� вашу �р��ра��у. Эт�т ��ерат�р �ри��дит�� в �ценари�х не т�ль�� дл� �тлад�и — ин��да нуж� н�, чт��ы �ценарий выв�дил те��т�вую инф�р�ацию на ваш э�ран. Чуть ���же,
104 Глава 2. Руководство по VBScript в �лаве 4 и в ���ледующих �лавах �удут ���а�аны �ценарии, выв�д�щие ��и��и ��держи���� �а���, учетных �а�и�ей ��ль��вателей, �етевых ре�ур��в и дру��й инф�р�ации. Эт�т ��ерат�р вы�л�дит �чень �р��т�: wscript.echo выражение Он выв�дит �начение лю���� выражени� лю���� ти�а: дату, чи�л�, те��т или �улев� �начение. М�жн� �еречи�лить лю��е ��личе�тв� выражений, �тдел�� их дру� �т дру�а �а��ты�и, �а� в ��ерат�ре wscript.echo выражение, выражение, выражение, и V�S���p� выведет �начение �ажд��� и� них, �тделенн�е �т дру�их �начений �дин�чны� �р��ел��. ▼) Оператор Wscript.Echo может оказаться полезным только при запуске сценария с помощью команды cscript. Если сценарий будет запущен с помощью Wscript, WSH выведет весь текст Wscript.Echo с помощью появляющегося диалогового окна, точно так же, как при вызове функ- .Echo с помощью появляющегося диалогового окна, точно так же, как при вызове функ- Echo с помощью появляющегося диалогового окна, точно так же, как при вызове функ- с помощью появляющегося диалогового окна, точно так же, как при вызове функ- ции MsgBox. На�ри�ер, �ценарий username="Mary Smith" lastlogondate=#03/04/2011# wscript.echo "Последний вход в систему пользователя " _ & username & " состоялся ", lastlogondate выв�дит те��т Последний вход в систему пользователя Mary Smith состоялся 04.03.2011 Ка� �ыл� ���а�ан� ранее, V�S���p� �р��вл�ет �и����ть �ри ��ъединении �тр�� � ����щью ��ерат�ра & и ���в�л�ет ��ъедин�ть �� �тр���й �ере�енную лю���� ти�а — �н �ре��ра�ует �улев� �начение, дату или чи�л� в �тр��у, а �ате� ��ъедин�ет в�е в ре�ультирующую �тр��у. Эт� �в�й�тв� ��жн� и���ль��вать дл� д��авлени� т�ч�и � дате в ��нце �редл�жени�: username="Mary Smith" lastlogondate=#03/04/2011# wscript.echo "Последний вход в систему пользователя " _ & username & " состоялся ", lastlogondate & " ." Выв�д ��лучает�� � �равильн� ���тавленны� �на��� �ун�туации: Последний вход в систему пользователя Mary Smith состоялся 04.03.2011. Наболевшая тема П��в�льте �делать не��льш�е �т�ту�ление на те�у ф�р�атир�вани� ����щений. Ва� �рих�дил��ь ���да�ни�удь видеть, �а� ����ьютер выв�дит та��е в�т ве�ь�а не�ри�л�дн�е ����щение? 1 файлов удалено. Личн� �ен� та�ие ����щени� �ильн� ра�дражают. Не��н�тн�, ��че�у �ни ���тавлены �т�ль не�режн�, ведь ����щени� ��д��н��� ти�а ве�ь�а нетрудн� �т� ф�р�атир�вать и �риве�ти � н�р�альн��у литературн��у ��ы�у.
Более сложные темы, касающиеся VBScript 105 ШАБЛОН При подсчете в нашем обычном языке для единичного экземпляра предмета используется на- звание в единственном числе, в противном случае используется название предмета во множе- ственном числе. Это правило действует для любых чисел от нуля и выше. Рассмотрим пример: ' Файл примера script0214.vbs fornfiles=0to3 if nfiles = 1 then plural = "" else plural = "а(ов)" wscript.echo "Уже обработан(o) ", nfiles, "файл" & plural next В �дн�ра��в�й, черн�в�й �р��ра��е на эт� вни�ание ни�т� не ��ращает, н� е�ли ваша �р��ра��а �редна�начена дл� и���ль��вани� дру�и�и людь�и, �т�ит уделить вни�ание и ��ы�у. В �аче�тве у�ражнени� � �редла�аю ва� и��енить уче�ный �ценарий script0206.vbs, чт��ы �н выв�дил в ��нце �е�ни «1 �утыл�а» а не «1 �утыл��». Более сложные темы, касающиеся VBScript В эт�� ра�деле х�чет�� ра����треть р�д важных те� дл� ��лее ��ытных �р��ра�� �и�т�в, чт��ы ����чь и� дви�ать�� в �равильн�� на�равлении. Е�ли на данный ���ент эти те�ы �удет трудн� у�в�ить, не �т�ит �ереживать: �фера их �ри�енени� �тн��ит�� � наи��лее �л�жны� �р��ра��а� на V�S���p�. Обработка ошибок Не �е�рет, чт� �ценарии и дру�ие �р��ра��ы �� вре�ене� �тал�ивают�� � �р�� �ле�ны�и �итуаци��и: файл �т�ут�твует в �жидае��� �е�те, или ��ль��ватель ввел неверные данные, или... эт�т ��и��� ��жн� �р�д�лжать д� �е���нечн��ти. Сценарий ��жн� �делать та�и�, чт��ы �н ��хран�л ра��т�������н��ть �ри в��� ни�н�вении ��д��ных �р��ле�, в����ль��вавши�ь дл� эт��� �в�й�тв�� V�S���p�, ��т�р�е на�ывает�� ��ра��т��й �ши���. О�ычн�, е�ли ��ерат�р V�S���p� или ��ъе�т �т�л�нут�� � �р��ле��й, WSH �р��т� выв�дит ����щение �� �ши��е и ��танавливает вы��лнение �ценари�, не �авершив �аду�анн�й ра��ты. О�ра��т�а �ши��� ���в�л�ет �а�тавить V�S���p� �р�и�н�рир�вать �ши��и и �р�д�лжить вы� V�S���p� �р�и�н�рир�вать �ши��и и �р�д�лжить вы� �р�и�н�рир�вать �ши��и и �р�д�лжить вы� ��лнение �ценари�. Эт� в��ла�ает на ва� ����анн��ти �а���т��тельн�й �р�вер�и в��ни�н�вени� �ши���. О�ерат�р в����н�влени� вы��лнени� �ри �ши��е — on error resume next, �ред�и�ывает интер�ретат�ру V�S���p� �р�д�лжить вы��лнение �ценари�, е�ли �а��й�ни�удь ��ерат�р �т�л�нул�� � �ши���й. При и���ль��вании эт��� ��ерат�ра ��жн� �р�верить �начение в�тр�енн��� �в�й�тва err.number, чт��ы у�нать � �уще� �тв�вании �ши��и. Е�ли �ши��а дей�твительн� �лучила�ь, эт� �в�й�тв� �рини�ает ненулев�е �начение. Значение� �в�й�тва err.description �вл�ет�� �тр��а, ��ъ��� н�юща�, чт� и�енн� �р�и��шл� не та�, �а� над�. В���тан�вить ��ычн�е ��ведение,
106 Глава 2. Руководство по VBScript �ри ��т�р�� вы��лнение �ценари� �ри в��ни�н�вении �ши��и �ре�ращает��, ��жн� � ����щью ��ерат�ра on error goto 0. В ��льшин�тве �лучаев нужн� давать в����жн��ть V�S���p� �тлавливать �ши�� V�S���p� �тлавливать �ши�� �тлавливать �ши�� �и и �ре�ращать вы��лнение �ценари�, �����ль�у ��льшин�тв� �ши��� �ценари� �р�и�х�дит �� �ричине реальных �р��чет�в, � ��т�рых нужн� �нать, чт��ы и�еть в����жн��ть �т них и��авить��. О�ра��т�у �ши��� �ледует и���ль��вать т�ль�� дл� �ащиты т��� ��ерат�ра, � ��т�р�� и�ве�тн�, чт� е�� �т�а� �р�и��йдет, ���рее в�е��, �� не�ави��щи� �т ва� ���т��тель�тва�. В та��� �лучае �ледует �ридержи� вать�� �ледующей �хе�ы. ШАБЛОН Для защиты оператора, выполнение которого может закончиться неудачно, используется сле- дующий код VBScript: ... on error resume next ' не останавливать выполнение при ошибке оператор (операторы), ' вып олн ени е действия, в результате которые могут вызвать проблему ' кот орого может произойти ошибка failed = err.number <> 0 ' зап омн ить, если произошла ошибка err_cause = err.description ' сохранить описание ошибки (если была) on error goto 0 ' вос ста нов ить обычную остановку по ошибке if failed then ' вып олн ить действия при ошибке, например msgbox "Возникла следующая проблема: " & err_cause ... end if ... При в��ни�н�вении �ши��и эта ���лед�вательн��ть ��ерат�р�в �ценари� у�танавливает �начение �ере�енн�й failed в True. (Эт�т ре�ультат д�лжен �ыть �а�и�ан д� вы��лнени� ��ерат�ра on error goto 0, ��т��у чт� лю��й ��ерат�р on error ��ра�ывает инф�р�ацию.� В ��ще�, �ащищенную ча�ть нужн� делать �а� ��жн� ��р�че, ��т��у чт� е�ли вы��лнение �дн��� ��ерат�ра �авершит�� неудачн�, т� те ��ерат�ры, ��т�рые �а ни� �ледуют, в����жн�, та�же �удут нера��т�������ны�и. Е�ли �ши��а ��нару� жена, ��жн� вы��лнить лю��е �рие�ле��е дей�твие: решить �р��ле�у ��х�дны� ��������, ���ытать�� ее у�транить, ��вт�рить ���ыт�у вы��лнени� ��ерат�ра или �делать еще че���ни�удь ��дх�д�щее дл� данн�й �итуации. При�енение эт�й �хе�ы �удет ���а�ан� в� �н��их уче�ных �ценари�х данн�й �ни�и. ▼) Режим работы, устанавливаемый оператором on error, относится к вполне определенному ме- on error, относится к вполне определенному ме- error, относится к вполне определенному ме- error, относится к вполне определенному ме- , относится к вполне определенному ме- сту. Если он будет изменен в основном теле сценария, то он будет действовать только в нем, а не в каждой вызываемой функции или подпрограмме. Если изменить режим работы, устанав- ливаемый оператором on error внутри кода функции или подпрограммы, он будет действовать только внутри этого кода.
Более сложные темы, касающиеся VBScript 107 Процедуры: функции и подпрограммы Пр�цедуры �вл�ют�� �тр�ительны�и �л��а�и ��льших �р��ра��, на�и�анных на V�S���p�. Пр�цедура в вашей �р��ра��е — эт� �тдельна� �е�ци� ��да, вы��л� н�юща� ��н�ретную �адачу. Пр�цедуры �ывают двух ти��в: фун�ции и ��д�р�� �ра��ы. Мн��ие в�тр�енные фун�ции V�S���p� ва� уже �рих�дил��ь и�учать, н� ��жн� та�же ���дать и �в�ю ����твенную фун�цию. М�жн� та�же ���дать и ��д�р��ра�� �у, ��т�ра� ��х�жа на фун�цию, не в��вращающую �начение. Главн�е д��т�ин�тв� �р�цедур �а�лючает�� в т��, чт� ���ле �дн��ратн�й �а�и�и их в ��де �р��ра��ы �ни ���ут вы�ывать�� ���ль у��дн� ча�т�. При на� �и�ании фун�ции ��жн� т�ль�� �дин ра� ���ред�т�чить�� на т��, �а� вы��лнить ��н�ретную �адачу, чт��ы �ате� ��лучить в����жн��ть �р��т��� и���ль��вани� эт�й фун�ции, не вни�а� в детали ее ра��ты. Функции Чт��ы ���дать фун�цию, и���ль�уют�� ��ерат�ры Function и End Function. Лю�ую фун�цию или ��д�р��ра��у нужн� ���ещать после ��н�вн��� тела �ценари�. (Х�т� интер�ретат�р V�S���p� вы��лн�ет лю�ые ��ерат�ры, ��т�рые нах�д�т�� �ежду ваши�и фун�ци��и или ���ле них �а� ча�ть «��н�вн�й �р��ра��ы», ��д��н�е ра��еивание ��да �� файлу �ценари� ��жет �ильн� �а�утать тех, �т� �удет эт�т �ценарий читать.� На�ри�ер, �ледующа� �р��та� фун�ци� ��лучает �дин ар�у�ент и в��вращает �начение эт��� ар�у�ента � �ри�авленны� � не�у чи�л�� 2: function addtwo (value) addtwo = value+2 end function Ча�ть (value) ����щает V�S���p�, чт� фун�ци� �жидает �ередачи ей �дн��� ар�у�ента и чт� е�� �начение �на �удет хранить в �ере�енн�й �� и�ени value. Эта �ере�енна� �вл�ет�� локальной �� �тн�шению � фун�ции; е�ли в ваше� �ценарии та�же и���ль�ует�� �ере�енна� �� и�ени value, �ри вы��ве фун�ции addtwo ее �начение не изменяется. У фун�ции addtwo и�еет�� �в��, вре�енна� �ере�енна� �� и�ени value, ��т�ра� �уще�твует т�ль�� �ри ра��те addtwo. Следующа� �тр��а ��да ���а�ывает, �а� эта фун�ци� ��жет и���ль��вать�� в лю��� �е�те �ценари�: a = addtwo(3) К��да интер�ретат�р V�S���p� в�тречает выражение addtwo(3), �н начинает ���лед�вательн�е вы��лнение ��ерат�р�в фун�ции, �ри эт�� в �ере�енн�й value хранит�� �начение ар�у�ента 3. В��вращае��е �начение фун�ции у�танавливает��, ���да �р��ра��а �ри�ваивает �начение �ере�енн�й addtwo (т� е�ть �ере�енн�й � и�ене� �а��й фун�ции�. Нетрудн� д��адать��, чт� вы��в фун�ции �а�анчивает�� �ри�ваивание� �ере�енн�й a �начени� 5. Та�и� ��ра���, в�тр�енные фун�ции V�S���p� ��жн� д���лнить �в�и�и ���� �твенны�и фун�ци��и. При вы��ре и�ен �ере�енны� ар�у�ент�в, та�и� �а� value
108 Глава 2. Руководство по VBScript в �риведенн�� выше �ри�ере, нужн� �тдавать �ред��чтение те� и� них, ��т�рые и�еют �а��й�ни�удь ��ы�л, ����н�� те� �а�ы�, �а���� р�да инф�р�аци� �т них �жидает��. На�ри�ер, ���да фун�ции �ередает�� и�� файла (������m��, � ча�т�, уже �� �ривыч�е, на�ываю ар�у�ент fname. В ��их �ценари�х �ере�енна� или ар�у�ент �� и�ени fname в�е�да ��держит и�� файла. Следующа� фун�ци� ��лучает и�� файла, удал�ет и� не�� ра�ширение (у�а� �ывающее на ти� эт��� файла� и д��авл�ет � не�у ра�ширение .OLD . Эту фун�цию ��жн� и���ль��вать в �р��ра��е, ��т�ра� ���ирает�� ��н�вить файл. Е�ли нужн� ���дать ре�ервную ���ию файла д� вне�ени� и��енений в �ри�инал, �ледует в��� ��ль��вать�� эт�й фун�цией. Фун�ци� ��ределит нужн�е и�� файла ре�ервн�й ���ии на ��н�ве и�х�дн��� и�ени файла: ' Файл примера script0215.vbs function backup_file_name (fname) idot = InStrRev(fname, "." ) ifidot>0then backup_file_name = left(fname, idot-1)+" .OL D" else backup_file_name = fname+".O LD" end if end function Эта фун�ци� ра��тает �ледующи� ��ра���: фун�ци� InStrRev ведет ��и�� в �в�е� �ерв�� ар�у�енте (в данн�� �лучае в fname� �а���� �рав��� ���влени� вт�р��� ар�у�ента (в данн�� �лучае эт� �р��т� �и�в�л т�ч�и�. Она в��вращает �начение 0, е�ли вт�р�й ар�у�ент не найден, в �р�тивн�� �лучае �на в��вращает ���ицию внутри �ерв�й �тр��и, в ��т�р�й �удет найден эт�т ар�у�ент — 1, 2 и т. д . П�эт��у в данн�� �лучае �ере�енна� idot ��лучает �начение 0, е�ли т�ч�и не �удет в ар�у�енте и�ени файла fname, или же ��лучает �начение ��льше нул�, е�ли т�ч�а �удет найдена. (Е�ли ���ните, эта техн�л��и� уже и���ль��вала�ь ранее в данн�й �лаве, в �ри�ере script0208.vbs.� О�тальна� ча�ть фун�ции �ани�ает�� и�ене� ре�ервн�й ���ии файла. Е�ли т�ч�а �ыла найдена, фун�ци� ���тавл�ет н�в�е и�� файла и� �ервых �и�в�л�в �тар��� и�ени в�л�ть д� т�ч�и, н� и��люча� ее, д��авл�� � ни� �тр���в�е �начение .O L D. Е�ли т�ч�а в �тар�� и�ени не �ыла найдена, фун�ци� в�е равн� д��авл�ет . O LD . При вы��лнении �ледующих ��ерат�р�в �ере�енн�й file1 �ри�ваивает�� �начение MY.OLD, а �ере�енн�й file2 �ри�ваивает�� �начение SOMEFILE.OLD: file1 = backup_file_name("MY.DATA ") file2 = backup_file_name("SOMEFILE") Подпрограммы П�д�р��ра��ы ��х�жи на фун�ции, �а и��лючение� т���, чт� �ни не в��вращают ни�а�их �начений. Они и���ль�уют�� дл� вы��лнени� �а��й�ни�удь ��ределенн�й ра��ты —эти� ��жн� в����ль��вать�� и� в�е�� ��тальн��� ��да ваше�� �ценари�. На�ри�ер, �ледующа� ��д�р��ра��а ��лучает в �аче�тве �в�е�� ар�у�ента и�� файла. Она ��рашивает у ��ль��вател�, ��жн� ли удалить эт�т файл, и, е�ли ��ль� ��ватель щел�ает на �н���е OK, удал�ет е��:
Более сложные темы, касающиеся VBScript 109 ' Файл примера maybedel.vbs sub maybe_delete (fname) if msgbox("Удалить файл " & fname & "? ", vbYesNo) = vbYes then set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFile(fname) end if end sub В ��д�р��ра��е и���ль�ует�� в�тр�енна� фун�ци� MsgBox, �адающа� в��р�� ��ль��вателю �ценари�, д�лжен ли файл удал�ть��. Она выв�дит диал���в�е ��н� � дву�� �н���а�и: Да (Y� s � и Нет (No�. Е�ли ��ль��ватель щел�нет на �н���е Да (Y� s �, �р��ра��а и���ль�ует ��ъе�т FileSystemObject дл� реальн��� удалени� файла. (О�ъе�т FileSystemObject ра���атривает�� в �лаве 4.� Е�ли эта ��д�р��ра��а �удет ���ещена в ��нец файла �ценари�, в �р��ра��е ��жн� �удет в����ль��вать�� �ледующи�и ��ерат�ра�и: maybe_delete filename maybe_delete "OLD.DATA" К��да и�ве�тн�, чт� подробностями удалени� файл�в �ани�ает�� �р�цедура, ��н�тн�, чт� �ри на�и�ании �ценари� ��жн� ���нцентрир�вать�� на ��лее а�ту� альных �адачах (на решении �� удалении ��н�ретных файл�в�. Массивы Я�ы� V�S���p� ��ддерживает �ере�енные �а��ив�в. Ма��ивы �вл�ют�� �ере�ен� ны�и, в ��т�рых ��хран�ет�� ��лее �дн��� �тдельн��� �начени�. Ма��ив не�н��� ��х�ж на �н����вартирный д��, �де в �ажд�й �вартире и�еет�� �в�й жилец. Т�ч� н� та� же, �а� �ажда� �вартира и�еет �в�й н��ер, �тдельные �начени� в �а��иве идентифицируют�� �� н��ера�, на�ывае�ы� индексами. Ма��ивы и���ль�уют�� в т�� �лучае, ���да �ценарию �рих�дит�� ра��тать � �ере�енны� чи�л�� эле�ент�в (на�ри�ер, � и�ена�и ��ль��вателей или файл�в�. О�ычную �ере�енную в V�S���p� ��жн� ���дать �р��ты� �ри�ваивание� ей �начени�, а �еред �ервы� и���ль��вание� �ере�енн�й �а��ива нужн� ����щить � ее �уще�тв�вании V�S���p�. Ма��ивы ��ъ�вл�ют�� � ����щью ��ерат�ра dim (и�� ��начает d�m��s�o� — ра��ер�, ��т�рый ����щает V�S���p� �а��е ��льш�е �начение инде��а, ��т�р�е вы на�ерены и���ль��вать. Инде��аци� �а��ив�в на� чинает�� � нул�, ��эт��у ��ерат�р dim var(10) в дей�твительн��ти ���дает 11�эле�ентный �а��ив, � эле�ента�и var(0), var(1),..., var(10). П��ле ��ъ�влени� �а��ива е�� эле�ента� ��жн� �ри�в�ить �начени�: var(0) = "Первое значение" var(1) = "Второе значение" var(2) = "Третье значение" Б�льши� �реи�уще�тв�� и���ль��вани� �а��ив�в �вл�ет�� т�, чт� �ни ���в�� л�ют ���давать �р��ра��ы, не�ави�и�ые �т т��� ��личе�тва эле�ент�в, ��т�р�е
110 Глава 2. Руководство по VBScript тре�ует�� ��ра��тать. И���ль�у� ��ерат�ры ци�ла, ра����тренные ранее в данн�й �лаве, ��жн� ��уще�твл�ть ���лед�вательный �ере��р эле�ент�в �а��ива и ве�ти ���чередную ��ра��т�у �ажд��� эле�ента. Ра����три� �ри�ер: ' формирование массива из трех элементов dim var(3) var(0) = "Первое значение" var(1) = "Второе значение" var(2) = "Третье значение" nitems = 3 ' п осл едовательный перебор всех элементов массива с помощью For Each for each value in var wscript.echo value next ' п осл едовательный перебор всех элементов массива с помощью индексов for i = 0 to nitems-1 wscript.echo var(i) next В данн�� �ри�ере �начала ���дает�� �а��ив и� трех эле�ент�в, в �аждый и� ��т�рых ���ещает�� инф�р�аци�. Е�ли �аранее неи�ве�тн�, ���ль�� эле�ент�в �удет ���ещен� в �а��ив, е�� ��жн� ��ъ�вить � ��личе�тв�� эле�ент�в, �ре� вышающи� �р��н��ируе�ые ��тре�н��ти, а и���ль��вать в�е эле�енты не����а� тельн�. В �риведенн�� �ри�ере ��держи��е �а��ива выв�дит�� дважды. В �ервый ра� дл� эт��� и���ль�ует�� ци�л For Each, ��т�рый �� �череди �ри�ваивает и�еющие�� в �а��иве �начени� �ере�енн�й value. Ци�л For Each — �а�ый �р��т�й в на�и�а� нии, н� ��ль�у и� не�� ��жн� и�влечь т�ль�� в т�� �лучае, е�ли нужн� ��ра��тать а���лютн� �аждый эле�ент �а��ива. Вт�р�й ци�л ��уще�твл�ет ���лед�вательный �ере��р �а��ива, и���ль�у� �� �череди инде�� �ажд��� эле�ента. Эт�т ци�л �л�жнее в на�и�ании, �����ль�у инде��аци� �а��ива начинает�� � 0, и эт� ���т��тель�тв� нужн� �рать в ра�чет �ри �рин�тии решени� � �е�те ��тан�в�и �ере��ра. Дл� ��ращени� � �ажд��у эле�енту инде��ы д�лжны начинать�� � 0 и в��ра�тать д� ��личе�тва эле�ент�в �ину� 1. В �риведенн�� �ри�ере и�еет�� три эле�ента, ��эт��у на� нужен ци�л For, �ере�ирающий �начени� 0, 1 и 2. Да, эт� неуд��н�, н� и�енн� та� ра��тают �а��ивы в та�их ��ы�ах, �а� C и V�S���p�, и и�енн� та��й ��р�д�� �ал�жен в ��ще� �рин�тую �хе�у ра��ты � ни�и. При в�ей �в�ей �р��т�те данный �ри�ер ���а�ывает, �а� �а��ивы ������ны ��� �ратить ��ъе� ра��ты � ��льши� ��личе�тв�� эле�ент�в. Зде�ь �начени� �а��ива в�е�� лишь выв�дили�ь на э�ран, н� в����жн��ти �ценари� ��ра�д� шире. При и���ль��вании �а��ив�в нужн� т�ль�� лишь на�и�ать ��ерат�р ��ще�� �лана дл� ра��ты � �дни� эле�ент�� (на�ри�ер, var(i)�, а ци�л ���а��тит�� � ��вт�рении ра��ты � �ажды� и� эле�ент�в, тре�ующих ��ра��т�и.
Более сложные темы, касающиеся VBScript 111 ШАБЛОН Для обращения к элементам массива VBScript, где количество фактически используемых эле- ментов может быть меньше размера массива, используйте цикл For. Если количество исполь- зуемых элементов представлено значением переменной nitems, воспользуйтесь следующим оператором цикла: for i = 0 to (nitems-1) работа с элементом массива (i)... next Е�ли нужн�, �а��ивы ���ут �ыть на�тр�ены та�и� ��ра���, чт��ы их ра��ер ��� и��ен�ть�� в �р�це��е вы��лнени� �р��ра��ы. Сначала �а��ив д�лжен �ыть ��ъ�влен: dim varname() Зате�, �еред е�� �ервы� и���ль��вание� и в лю��е вре�� ���ле эт���, ра��еры �а��ива ���ут �ыть у�тан�влены или �ереу�тан�влены � ����щью ��ерат�ра ReDim: ReDim [preserve] имя_переменной(индекс) [, ...] При�ут�твие �лючев��� �л�ва preserve �а�тавл�ет V�S���p� ��хран�ть �уще� �твующие данные �ри и��енении ра��ера �а��ива; �ри �т�ут�твии preserve �ере� �енные �чищают�� �т �начений и дл� в�ех эле�ент�в у�танавливает�� �начение Nothing. (Ра�у�еет��, даже �ри и���ль��вании �лючев��� �л�ва preserve у��р�� чение �а��ива �рив�дит � ��тере в�ей инф�р�ации, хранившей�� в �а�ы�ающих эле�ентах, �т ��т�рых �а��ив и��авл�ет��.� Область видимости переменных П� у��лчанию, ���да �ере�енна� ��ъ�влена или ���дана в ��н�вн�� теле файла �ценари�, �на и�еет глобальную область видимости, т� е�ть �на та�же д��ту�на лю��й �р�цедуре, вы�ывае��й в �ценарии. А в�т �ере�енные, ��ъ�вленные внутри фун�ций или ��д�р��ра��, и�еют �� у��лчанию закрытую область видимости. Они д��ту�ны т�ль�� внутри �р�цедуры, в ��т�р�й �ыли ��ъ�влены. Е�ли в �р�� цедуре и�еет�� �ере�енна� �� и�ени var, т� �ри вы��ве дру��й �р�цедуры �на не �удет и�еть д��ту�а � эт�й �ере�енн�й. П�д��на� �хе�а �ащищает �ере�енные в ваших �р�цедурах �т не�редна�еренн��� и��енени� дру�и�и �р�цедура�и. К��да �р�цедура, ��ределивша� �ере�енную, �ре�ращает �в�ю ра��ту, �ере�енна� уничт�жает��. Е�ли нужн� �вны� ��ра��� ���дать �ере�енные � �л��альн�й ��ла�тью види� ���ти, эт� ��жн� �делать � ����щью �т�ерат�ра public. Т� же �а��е �тн��ит�� и � �а�рыты� �ере�енны�, ��т�рые ��жн� ���дать � ����щью ��ерат�ра private. Пу�личные �ере�енные д��ту�ны лю��й �р�цедуре и �уще�твуют д� тех ��р, ���а �ценарий не �ре�ратит ра��ту. На�ри�ер, �р�цедура ��жет и���ль��вать �ледую� щий ��ерат�р дл� ��ъ�влени� �ере�енн�й Fsh и �а��ива MyArray, ��т�рые �удут д��ту�ны в�е� �р�цедура� в �ценарии: public Fsh, MyArray(10)
112 Глава 2. Руководство по VBScript П� у��лчанию �ере�енные ���ут и���ль��вать�� �е� �редварительн��� ��ъ� �влени� (или ��ределени� ра��ера�. О�ытные �р��ра��и�ты �нают, чт� эт� ��жет �риве�ти � трудн� ��наруживае�ы� �ши��а�, �����ль�у в та��� �лучае трудн� найти ��ечат�и; ���ира��ь и��енить �начение уже �уще�твующей �ере�енн�й, ��жн� �р��т� ���дать н�вую, на�и�анную � �ши��а�и �ере�енную. О�ерат�р Option Explicit и��равл�ет данную �итуацию, тре�у� �т ва� ��ъ�влени� в�ех �ере�енных �еред их �ри�енение�, � и���ль��вание� ��ерат�р�в dim, public или private. Я ре���ендую �ри�ен�ть эт�т �тиль �р��ра��ир�вани� в �л�жных �ценари�х. При �ерв�� на�и�ании �р��ра��ы дл� эт��� ��тре�ует�� не�н��� д�� ��лнительн�й ра��ты, н� �ат� эт� ����жет и��авить�� �т цел�й �ате��рии �ши���. Чт��ы в����ль��вать�� данн�й в����жн��тью, �делайте ��ерат�р Option Explicit �ерв�й �тр���й �в�е�� файла �ценари�. Зате� ���тавьте ���ле не�� ��ера� т�р dim, у�а�ыва� в ��де �аждую �ере�енную, и���ль�уе�ую в �ценарии. К�нечн�, ��ерат�р dim и���ль�ует�� дл� ��ъ�влени� �ере�енных �а��ива, н� �н та�же ��жет и���ль��вать�� и дл� ��ределени� ��ычных �ере�енных. В�т �ри�ер �ценари� � ��ечат��й: option explicit dim myname myname = "Брайан" wscript.echo "Привет, ", mynam Эт�т �ценарий ��енерирует ����щение �� �ши��е, �а� т�ль�� �т�л�нет�� � не� ��ределенн�й, на�и�анн�й � �ши���й �ере�енн�й mynam. Бе� ��ерат�ра Option Explicit эт�т �ценарий �р��т� ра��ечатает «Привет, », �е� �а�их�ли�� дру�их �ри�на��в �ши��и. Дополнительные источники информации Суще�твует еще �н�же�тв� инф�р�ации � V�S���p�, �р��е т�й, ��т�ра� �ыла и�� л�жена в данн�й �лаве. В �нижн�� �а�а�ине ��жн�, наверн�е, на�рать целую ��л�у �ни�, ���в�щенных и��лючительн� V�S���p�. Дл� ��лучени� �рат��й ��рав�и �� в�е� ��ерат�ра�, фун�ци��, ��ъе�та� и ��н�танта� V�S���p� �а�ру�ите ��рав�чни� �� ��ы�у (V�S���p� L��gu�g� R��������� � ве���айта technet.microsoft.com/scriptcenter. В�е ин�тру�ции �� �р����тру и �а�ру��е � уже давал в начале эт�й �лавы. И на��нец, � �читаю, чт� ���аты� и�т�чни��� инф�р�ации дл� в�ех, �т н�вич� ��в д� �нат���в, ���ут �тать не��т�рые н�в��тные �ру��ы M���oso��. О���енн� ��ле�ны�и �не �ред�тавл�ют�� �ру��ы www.microsoft.public.scripting.vbscript и www. microsoft.public.scripting.wsh. М�жн� �н����у научить��, �т�лежива� х�д ди��у��ий, и, в �тличие �т ��льшин�тва дру�их н�в��тных �ру��, ���ла�н� ��е�у ��ыту, �де�ь и�еет�� реальный шан� ��лучить ��ле�ный �твет на ��у�ли��ванный в��р��. Х�т� не��т�рые ���уждени� �а�ают�� и���ль��вани� V�S���p� на ве���ервере и в �рил�жени�х ве���рау�ера, ��льшин�тв� ���уждений �ри�ени�� и � на�и�а� нию �ценариев.
Создание сценариев и работа с объектами Эту �лаву ��жн� ра���атривать �а� введение в та�ие ��н�ти�, �а� ��ъе�ты, �ет�ды и �в�й�тва. За�ладывают�� ��н�вы �наний, не��х�ди�ых дл� у�в�ени� �атериала �ледующих �е�и �лав. y Зде�ь �удет ра����трен ��р�д�� и���ль��вани� ��ъе�т�в, �ред��тавл�е�ых W��dows S���p� Hos� �ри ра��те � ра�личны�и ��ы�а�и �ценариев. y Наи��льшую ��ль�у и� �ред�тавленн��� �атериала ��жн� и�влечь ���ле ��на� ���лени� х�т� �ы � �дни� и� ��ы��в �р��ра��ир�вани� �ценариев. y В ���ледне� ра�деле вы увидите, �а� ��жн� и�учить �н�же�тв� нед��у�енти� р�ванных ��ъе�т�в, �ред��тавл�е�ых W��dows. Введение в объекты В�е ��ы�и �ценариев, ра����тренные в �лаве 1 «W��dows S���p� Hos�», �ред��тавл�� ют �а��вый ин�тру�ентарий дл� у�равлени� вы��лнение� �ценари� и дл� ра��ты �� �тр��а�и, чи�ла�и, дата�и и т. д., н� �ни не в�е�да �ред��тавл�ют ������ в�а� и��дей�тви� � W��dows, файла�и или �ри�ладны�и �р��ра��а�и. Эти фун�ции �ред��тавл�ют�� объектами — д���лнительны�и �����нента�и, ра�шир�ющи�и в����жн��ти, �в�й�твенные ��ы�а� �р��ра��ир�вани�. В данн�� ра�деле ��ъ� ��н�ет��, чт� та��е ��ъе�ты, и дает�� введение в те ��н�ти�, � ��т�ры�и �ридет�� �тал�ивать�� �ри ра��те � ни�и. В �ледующих ра�делах ра���атривают�� в��р��ы и���ль��вани� ��ъе�т�в в не���ль�их ��ы�ах �р��ра��ир�вани�. В �а��� ��ще� ��ы�ле объекты — эт� не��льшие �р��ра��ные �л��и, ��т�рые �ани�ают�� ��ра��т��й и �ерен���� инф�р�ации. Они �вл�ют�� �р��ра��ны� �ред�тавление� че���ни�удь веще�твенн���, на�ри�ер файла, �а��и, �етев��� ��д� �лючени�, ����щени� эле�тр�нн�й ��чты или д��у�ента �x���. У ��ъе�т�в и�еют� �� �в�й�тва и �ет�ды. Свойства — эт� �начени� данных, ��и�ывающие �ри�на�и т��� �ред�ета, �ред�тавителе� ��т�р��� �вл�ет�� ��ъе�т. Методы — эт� дей�тви�, �в�е��ра�ные ��д�р��ра��ы, ��т�рые ��жн� и���ль��вать дл� и��енени� или у�равлени� в�е�, чт� �ред�тавл�ют ��ъе�ты. 3
114 Глава 3. Создание сценариев и работа с объектами На�ри�ер, файл на ваше� же�т��� ди��е и�еет ра��ер, дату ���дани� и и��. Стал� �ыть, в�е эт� �ринадлежит � �в�й�тва�, наличие ��т�рых ��жн� �жидать в ��ъе�те File. Файл ��жн� �ереи�ен�вать, удалить, �р�читать или �а�и�ать в не�� данные, �тал� �ыть, ��ъе�т File д�лжен �ред��тавл�ть �ет�ды дл� вы��лнени� в�ех этих �адач. Важны� а��е�т�� ��ъе�т�в �вл�ет�� их и��лир�ванн��ть и ���� ���ленн��ть �т т�й �р��ра��ы, ��т�ра� их и���ль�ует. Ка� ��ъе�т хранит внутри �е�� �в�и данные и ра��тает � ни�и — эт� е�� ����твенн�е дел�. Ка�ие и�енн� данные и �р�цедуры �танут д��ту�ны внешне�у �иру, вы�ирает авт�р ��ъе�та. На �р��ра��и�т���� жар��не ��в�рит��, чт� ��ъе�т выставляет �в�й�тва и �ет�ды; и� этих эле�ент�в и ���тавлен е�� интерфейс. На ри�. 3 .1 ���а�ан интерфей� �и� ��тетиче����� ��ъе�та File. Рис. 3 .1. Данный гипотетический объект File имеет интерфейс, который может использоваться другими программами. От внешних программ скрыто, как именно объект File хранит информацию и проделывает свою работу О�ъе�ты нуждают�� в �ехани��е, ���ред�тв�� ��т�р��� �ни ���ут ���ени� вать�� инф�р�ацией � �в�й�твах и �ет�дах � �р��ра���й или �ценарие�. П�� ���ль�у у �ажд��� ��ы�а �р��ра��ир�вани� е�ть �в�й ����твенный уни�альный ������ хранени� и �ередачи данных, ��ъе�ты и �р��ра��ы д�лжны и���ль��вать не�ие ���ла��ванные, ��щие ������ы ���ена данны�и. Дл� ���дани� �ценариев и дл� ��льшин�тва �рил�жений W��dows ����ани� M���oso�� и���ль�ует �ред� �тв� ��д на�вание� модель компонентных объектов — Compo���� Obj��� Mod�� (COM�. COM���ъе�ты ���ут и���ль��вать�� лю�ы�, ��в�е�ти�ы� � ни�и ��ы� ���, в�люча� V�S���p�, JS���p�, C, C++, C#, V�su�� ��s��, P��� и т. д . COM���ъе�ты ���ут та�же на�ывать�� ��ъе�та�и A���v�X — ActiveX Objects, ��ъе�та�и авт��а� ти�ации — Automation Objects или OL����ъе�та�и — OLE objects, е�ли у них и�еют� �� в��лне ��ределенные д���лнительные �в�й�тва, н� не�ави�и�� �т т���, �а� �ни на�ывают��, техн�л��и� �а�ирует�� на ��дели �����нентных ��ъе�т�в — COM. В �ледующих не���ль�их �лавах �удут ���а�аны ��ъе�ты, �ред�тавл�ющие фай� лы, �а��и, �етевые ��д�лючени�, ��ль��ватель��ие учетные �а�и�и, �ринтеры, �а� �и�и рее�тра, �рил�жени� W��dows, ����щени� эле�тр�нн�й ��чты и �н��ие дру�ие а��е�ты ваше�� ����ьютера и �ети. W��dows ���тавл�ет�� � �р��ра��ны� ��е��ече� ние�, �на�жающи� ва� ��р��ны� ��личе�тв�� ��ъе�т�в. Д���лнительные ��ъе�ты ��жн� та�же �а�ру�ить, �ри��ре�ти или ���дать �� �в�е�у ����твенн��у �а�ы�лу.
Введение в объекты 115 Классы и экземпляры Два дру�их ��н�ти�, � ��т�ры�и вы ��жете �т�л�нуть�� �ри ра��те � ��ъе�та� �и, — эт� класс и экземпляр. Ра�ница �ежду ни�и та�а� же, �а� �ежду ра��чи�и чертежа�и д��а и �а�и� д����. Сл�в� класс �тн��ит�� � ��ределению ��ъе�та: е�� интерфей�а (�ред��тавл�е� �ых и� �в�й�тв и �ет�д�в� и е�� реали�ации (��рыт��� �р��ра��н��� ��держи��� ��, вы��лн�юще�� в�ю ра��ту�. W��dows �ред��тавл�ет ��тни ��ле�ных �ла���в ��ъе�т�в, и вы ��жете д��авить � ни� (или ���дать� �а�ие�ни�удь д���лнитель� ные ��ъе�ты. Ка� уже ��в�рил��ь, ���дание ��ъе�т�в ��и�ан� в �рил�жении G, «C������g You� Ow� S���p��b�� Obj���s» («С��дание �в�их ����твенных ��ъе�т�в, �ри�ен�е�ых в �ценари�х»�, ��т�р�е ��жн� �а�ру�ить � ве��адре�а www.helpwin7. com/scripting. К��да ��ъе�т и���ль�ует�� в �ценарии, �р��ра��а �ла��а ���дает �дин или не���ль�� экземпляров ��ъе�та. Э��е��л�р �вл�ет�� уча�т��� ����ьютерн�й �а��ти, �редна�наченны� дл� хранени� данных ��ъе�та. Зате� �р��ра��а �ла��а дает вашей �р��ра��е ссылку дл� ее и���ль��вани� �ри ра��те � ��ъе�т�� — иден� тифи�аци�нн�е �начение, ��т�р�е �р��ра��а �ла��а ��жет и���ль��вать, чт��ы ��ределить, �а��й ��н�ретн� э��е��л�р ��ъе�та и���ль�ует ваш �ценарий или �р��ра��а. Эта �тади� ���а�ана на ри�. 3.2: �ере�енные file1 и file2 и �вл�ют�� те�и �а�ы�и �ере�енны�и, ��т�рые ��ылают�� на два э��е��л�ра ��ъе�та File. "" Рис. 3 .2 . Переменные obj1 и obj2 ссылаются на объекты класса File. На этой иллюстрации показаны два экземпляра объекта File С�ыл�а ра���атривает�� та� же, �а� и лю�а� дру�а� �ере�енна� в вашей �р�� �ра��е. Мет�ды и �в�й�тва ��ъе�т�в ��жн� и���ль��вать дл� ра��ты �� ��ыл��й на ��ъе�т т�чн� та� же, �а� фун�ции sqrt() и left() ��жн� и���ль��вать дл� ра��ты � чи�л�вы�и и �тр���вы�и �ере�енны�и. Контейнеры и коллекции Ка� уже у���инал��ь, объект �вл�ет�� �ред�тавление� не��т�р�й, в��лне реальн� �уще�твующей вещи, та��й �а� д��у�ент или же�т�ий ди��, и у не�� и�еют�� �в�й� �тва, ��т�рые �ред�тавл�ют реальные �ри�на�и вещей. На�ри�ер, ��ъе�т ��л��� ��жет и�еть та�ие �ри�на�и, �а� цвет или �и�лый в�у�.
116 Глава 3. Создание сценариев и работа с объектами Фа�тиче��ие данные, ��хран�е�ые дл� цвета, ���ут �ыть �тр���й �и�в�л�в, на�ри�ер "red" (�ра�н�е� или "green" (�елен�е�. Ки�лый в�у� ��жет �ыть �ред� �тавлен чи�л�� �т 0 (�лад��е �а� �ахар� д� 10 (�ле�у выши�ает�. О�ъе�т, ��и�ывающий файл на же�т��� ди��е, ��жет и�еть та�ие �в�й�тва, �а� и�� — name (�и�в�льна� �тр��а� и ра��ер — size (чи�л��. О�ъе�т, �ред�тавл�ющий же�т�ий ди��, ��жет и�еть �в�й�тва, ��и�ывающие ��ъе� же�т���� ди��а, и�� т��а, а та�же инф�р�аци�нн�е на��лнение ди��а. Те�ерь ��держи��е же�т���� ди��а ��жет �ыть �ред�тавлен� в виде ��и��а и�ен файл�в или �а��ива �тр���вых �начений. Н�, в����жн�, ��ле�нее �удет, е�ли же�т�ий ди�� ���жет выдать ��и��� ��ъе�т�в file, ��т�рые �ате� ��жн� �удет и���ль��вать дл� ра��ты � �а�и�и файла�и. И�енн� та� и ра��тают �н��ие ��ъе�ты. Та�, �де эт� в����жн�, ��ъе�ты ���ут вернуть ��ыл�и на дру�ие ��ъе�ты. К��да ��ъе�т д�лжен �ред��тавить ва� не���ль�� дру�их ��ъе�т�в, �н выда�т ва� ��ециальный ��ъе�т, ��т�рый на�ывает�� коллекцией — �н хранит внутри �е�� �р�� и�в�льн�е чи�л� дру�их ��ъе�т�в. На�ри�ер, ��ъе�т Folder ��жет �ред�тавл�ть �а��у на ваше� же�т��� ди��е, и е�� �в�й�тв� Files ��жет выдавать ��лле�цию ��ъе�т�в File, ��т�рые, �а� эт� ���а�ан� на ри�. 3 .3, �ред�тавл�ют �аждый файл в �а��е. Рис. 3 .3 . Объекты File и Folder могут представлять содержимое жесткого диска. Содержимое папки может быть представлено коллекцией объектов File и Folder О�ъе�т���лле�ци� ��жет ��держать внутри �е�� ��ъе�ты любого ти�а, и у не�� �а���� е�ть �в�и �в�й�тва и �ет�ды, ���в�л�ющие ве�ти ��д�чет этих ��ъе�т�в, а та�же и�вле�ать их и ра��тать � ни�и. «К�нтейнер» ��ъе�т�в, ��держащий дру�ие ��ъе�ты лю���� �р�и�в�льн��� ти�а, — ��ычн�е �вление в ��ъе�тн���риентир�� ванн�� �р��ра��ир�вании. О�ъе�ты W��dows A���v�X и���ль�уют ��ъе�ты���нтейнеры, и�еющие два �в�й�тва: эле�ент — Item и длина — Length. Св�й�тв� Length ���а�ывает, ���ль��
Введение в объекты 117 эле�ент�в нах�дит�� в ��лле�ции. Св�й�тв� Item и�вле�ает �дин и� эле�ент�в. В не��т�рых ��лле�ци�х �тдельные ��ъе�ты и� ��лле�ции ��жн� и�влечь � и�� ��ль��вание� �а�и�и Item(0), Item(1) и т. д . Н� дл� �н��их ��лле�ций �в�й�тв� Item тре�ует и�� или дру�ую ��рытую ���тавл�ющую идентифи�аци�нн�й ин� ф�р�ации. П�эт��у �аждый ��ы� �ценариев �ред��тавл�ет ��лее ��щий ������, ���в�л�ющий �р�верить в�е ��ъе�ты в ��лле�ции. Далее в эт�й �лаве данный в��р�� �удет ра����трен ��лее ��др��н�. К�лле�ции в �р��ра��ир�вании �ценариев W��dows в�тречают�� ��в�юду, и у не��т�рых ��ы��в и�еют�� ��ециальные �ред�тва дл� ра��ты � ни�и. При�еры и���ль��вани� ��лле�ций в �ажд�� и� ��ы��в �р��ра��ир�вани� ра���атрива� ют�� далее. Обозначение объектов П����ль�у ��ъе�ты �вл�ют�� �тдельны�и �р��ра��ны�и �����нента�и, �ценарии и дру�ие �р��ра��ы, ��т�рые их и���ль�уют, нуждают�� в ������е их ��наружени� и ����щени� W��dows � не��х�ди���ти их а�тиви�ации. В данн�� ра�деле �удет ра���а�ан�, �а� эт� делает��. Каждый �р��ра��и�т, ���дающий �ла�� ��ъе�та, дает е�у в т�й или ин�й �те�ени ��н�тн�е и��. На�ри�ер, �ла�� Scripting.FileSystemObject ра�ра��тан дл� и���ль��вани� �р��ра��а�и W��dows S���p� Hos� (WSH� � целью �р����тра ��держи���� же�т�их ди���в и у�равлени� ди��а�и, файла�и и �а��а�и. В �аж� д�� и� ��ы��в �р��ра��ир�вани�, д��ту�н�� дл� и���ль��вани� � WSH, и�еет�� ������ ���дани� э��е��л�ра ��ъе�та � у�а�ание� т�ль�� эт��� и�ени. На�ри�ер, в V�S���p� эту ра��ту вы��лн�ет ��ерат�р set fsobj = CreateObject("Scripting.FileSystemObject") а в Op�� Obj��� R�XX е�у ���твет�твует ��ерат�р fsobj = .OL EObject~New("Scripting.FileSystemObject") В лю��� �лучае ��ерат�р �а�тавл�ет интер�ретат�р WSH �а�р��ить у W��dows ���дание э��е��л�ра у�а�анн��� ��ъе�та. W��dows ведет ��и�� и�ени ��ъе�та в рее�тре, ищет и�� файла �р��ра��ы, ��т�ра� ра��тает � �ла���� эт��� ��ъе�та (��ычн� эт� файл, чье и�� �а�анчивает�� ра�ширение� .dll или .ocx�, и �а�у��ает д���лнительную �р��ра��у. Пр��ра��а �ла��а ���дает э��е��л�р ��ъе�та и �ред�� �тавл�ет ваше�у �ценарию ��ыл�у, ��т�рую �н ��жет и���ль��вать �ри ра��те � ��ъе�т��. Чуть ���же в эт�й �лаве �удет ���а�ан�, �а� эт� делает�� в �ажд�� ��ы�е, ��� в�е�ти��� � WSH. П�чти в� в�ех �луча�х эт��� ва� �удет в��лне д��тат�чн� дл� ра��ты. В ��тавшей�� ча�ти данн�й �лавы �удет ���а�ан�, �а� и���ль��вать ��ъе�ты в V�S���p� и в дру�их ��ы�ах. В �ледующе� ра�деле, ���в�щенн�� V�S���p�, и�� ��ль�ует�� та��й же �тиль, ��т�рый и���ль��вал�� в �лаве 2 «Ру��в�д�тв� �� V�S���p�», а ��и�ание �атериала дл� дру�их ��ы��в �ред��ла�ает наличие ��лее ��лидн��� ��ыта �р��ра��ир�вани�. И на��нец, в �авершение данн�й �лавы �удет ����щен�, �а� ��жн� найти ��� ле�ные ��ъе�ты, не в�тречающие�� в ���ледующих �лавах эт�й �ни�и.
118 Глава 3. Создание сценариев и работа с объектами Использование объектов в VBScript Дл� и���ль��вани� ��ъе�т�в в V�S���p� �начала нужн� ���дать э��е��л�р ��ъе�та и ��хранить ��ыл�у на не�� в �ере�енн�й V�S���p�. Зате� ��жн� �удет ��лучить д��ту� � �ет�да� и �в�й�тва� ��ъе�та, и���ль�у� выражени� переменная.имя_свой ства или переменная.имя _метода. Пр�ще �удет ���а�ать, че� ��ъ��нить, ��эт��у ра����три� �ри�ер. Эт�т не��льш�й �ценарий ����щает, и�еет�� ли на ваше� ди��е C: �а��а � и�ене� \windows: set fso = CreateObject("Scripting.FileSystemObject") if fso.FolderExists("c:\windows") then WScript.echo "Папка с именем c:\windows существует" end if В �ерв�й �тр��е �ценари� ���дает�� э��е��л�р ��ъе�та Scripting.FileSystem- Object. Эт� �ла�� ��ъе�та, �ред��тавл�е�ый WSH, у ��т�р��� и�еют�� уд��ные �в�й�тва и �ет�ды, д��ту�ные дл� и���ль��вани� �ри анали�е ���т��ни� ди���в и �ри ра��те � ни�и, и � их файла�и. Е�ли у�рать �л�в� set, в�е эт� �танет ��х�жи� на ��ычный вы��в фун�ции � в��вращае�ы� �начение�, ��т�р�е �ри�ваивает�� �ере�енн�й. На �а��� деле эт� та� и е�ть. CreateObject — эт� фун�ци�, ���дающа� н�вый э��е��л�р ��ъе�та. Н�вы� дл� на� �де�ь �вл�ет�� �л�в� set, ��т�р�е ��ы� V�S���p� тре�ует и���ль��� вать, чт��ы �ыл� видн�, чт� ��хран�ет�� не ��ычн�е �начение, а ��ыл�а на ��ъе�т. В ��ще� виде �инта��и� ���дани� э��е��л�ра ��ъе�та в V�S���p� вы�л�дит �ледующи� ��ра���: set имя_переменной = CreateObject("имя_объекта") �де имя_переменной — эт� �ере�енна�, ��т�рую вы х�тите и���ль��вать дл� хра� нени� ��ыл�и на ��ъе�т, а имя_объекта — эт� ти� ��ъе�та, э��е��л�р ��т�р��� вы х�тите ���дать. В� вт�р�й �тр��е �ри�ера и���ль�ует�� �ет�д FolderExists, ���в�л�ющий ��ределить, �уще�твует ли у�а�анна� �а��а. Следует ���нить, чт� �ет�ды и �в�й� �тва ��х�жи на ��ы�н�венные фун�ции и ��д�р��ра��ы; �р��т� �ни «живут» в �тдельн�й �р��ра��е, ��т�рую �ред��тавл�ет �ла�� ��ъе�та. При�ут�твие fso. �еред FolderExists ����щает V�S���p�, чт� фун�ци� FolderExists �вл�ет�� ча�тью �ла��а ��ъе�та, на ��т�рый ��ылает�� fso и ��т�рый в данн�� �ри�ере �вл�ет�� э��е��л�р�� ��ъе�та Scripting.FileSystemObject. Не��т�ры� �в�й�тва� и �ет�да� �ередают�� ар�у�енты, чт� видн� на �ри�ере FolderExists. При их �ередаче нужн� и���ль��вать �ру�лые �����и, т�чн� та� же, �а� эт� делает�� �ри вы��ве лю��й дру��й фун�ции или ��д�р��ра��ы V�S���p�. Е�ли �ет�д или �в�й�тв� в��вращает �начение фун�ции, нужн� и���ль��вать �ру�лые �����и: переменная = объект.свойство("аргументы", "в", "скобках") Е�ли �ет�д не в��вращает �начени�, �����и ��жн� не �тавить: объект.метод "аргументы", "без", "скобок"
Использование объектов в VBScript 119 В�е эт� уже �на����, не �равда ли? О�ъе�ты �а� та��вые �ы и���ль��вали �� в�е�у ру��в�д�тву �� V�S���p� в �лаве 2, в ��ерат�рах �ледующе�� вида: WScript.echo "Сегодняшнее число — ", date Те�ерь уже ��жн� ра����нать в WScript ��ыл�у на ��ъе�т, а в echo — вы��в �дн�� �� и� е�� �ет�д�в. Н� дл� у�тан�в�и WScript и���ль��вать CreateObject не нужн�, �����ль�у V�S���p� �ред��тавл�ет ��ыл�у на эт�т ��ъе�т авт��атиче��и. О�ъе�т WScript и�еет р�д дру�их ��ле�ных �ет�д�в и �в�й�тв, ��т�рые �удут ра����трены в данн�й �лаве чуть ���же. Ка� уже у���инал��ь, не��т�рые �в�й�тва и �ет�ды в��вращают в �в�их �на� чени�х ��ыл�и на дру�ие ��ъе�ты. На�ри�ер, ��ъе�т Scripting.FileSystemObject и�еет �ет�д GetFile, в��вращающий ��ыл�у на ��ъе�т File, ��т�ра� �ате� ��жет �ыть и���ль��вана дл� �р�вер�и ���т��ни� файла и ра��ты � ни�. Ра����три� уче�ный �ценарий, �ред��тавл�ющий ра��ер и дату ���дани� файла �р��ра��ы Бл��н�т — \windows\notepad.exe: set fso = CreateObject("Scripting.FileSystemObject") set file = fso.GetFile("c:\windows\notepad.exe") WScript.echo "Файл Notepad.exe был создан ", file.DateCreated WScript.echo "и имеет длину ", file.Size, " байт" Перва� �тр��а та�а� же, �а� и в �редыдуще� �ценарии, �на ���дает э��е��л�р ве�ь�а ��ле�н��� ��ъе�та Scripting.FileSystemObject. В� вт�р�й �тр��е ��ъе�ту FileSystemObject делает�� �а�р�� на в��вращение ��ъе�та File, �ред�тавл�юще�� файл c:\windows\notepad.exe. П����ль�у эт�т ��ъ� е�т нужн� и���ль��вать не���ль�� ра�, ��ыл�а на не��, �ла��дар� и���ль��ванию �лючев��� �л�ва set, ��хран�ет�� в �ере�енн�й file. (Х�т� в V�su�� ��s�� file �вл�ет�� �аре�ервир�ванны� �л�в��, в V�S���p� эт� не та�, ��эт��у е�� ��жн� и���ль��вать в �аче�тве и�ени �ере�енн�й.� В �ледующих двух �тр��ах и���ль�уют�� �в�й�тва ��ъе�та File ��д на�вани��и DateCreated и Size. П����ль�у ар�у�енты и� не нужны, �ру�лые �����и �т�ут�тву� ют. В��вращае�ые �начени� даты�вре�ени и чи�ла выв�д�т�� �ет�д�� WScript. echo. На ��е� ����ьютере эт�т выв�д и�ел �ледующий вид: Файл Notepad.exe был создан 14.07 .2009 2:41:04 и имеет длину 179712 байт Автоматизация и файлы документов Фун�ци� GetObject ��жет и���ль��вать�� дл� ��лучени� ��ъе�та, �ред�тавл�юще� �� не�ий уже �уще�твующий файл д��у�ента, чере� �р�це��, ��т�рый в ����ании M���oso�� на�ывает�� Автоматизацией (Au�om���o��. Фун�ци� GetObject и���ль�у� ет и�� файла д��у�ента дл� ��и��а ���твет�твующе�� �ервера �ла��а ��ъе�та чере� �тандартный �ехани�� �����тавлени� ти�а файла и �рил�жени�. С����тавлени� ти��в файл�в ��жн� увидеть в W��dows XP в W��dows �xp�o���, щел�нув на Сер- вис (Too�s�, Свойства папки (Fo�d�� Op��o�s�, Типы файлов (F��� Typ�s�. В W��dows 7 и V�s�� эт� �����тавление ��жн� ��лучить чере� Панель управления (Co���o� P�����,
120 Глава 3. Создание сценариев и работа с объектами Программы по умолчанию (P�og��ms�, Сопоставление типов файлов или протоколов конкретным программам (M�k� � F��� Typ� A�w�ys Op�� �� � Sp������ P�og��m�. В �ледующе� уче�н�� �ценарии фун�ци� GetObject и���ль�ует�� дл� ���дани� ��ъе�та д��у�ента Wo�d, �ред�тавл�юще�� �уще�твующий файл, и ��лучени� ра�� �ечат�и эт��� д��у�ента: set obj = GetObject("C:\docs\userlist.doc") ' получение объекта для ' существующего документа obj.Printout ' печ ать документа set obj = Nothing ' осв обождение объекта Фун�ци� GetObject ��жет та�же ��лучить ��ыл�у на уже �уще�твующий ��ъ� е�т, ���данный �а��й�ни�удь дру��й �р��ра���й чере� и��, ��т�р�е на�ывает�� псевдонимом (mo��k���. Дл� у�равлени� �етевы� ���ен��, W��dows и учетны�и �а�и���и ��ль��вателей в A���v� D�����o�y ��жет �ыть и���ль��ван р�д уже �у� ще�твующих ��ъе�т�в. Эта те�а �удет ра����трена в �лаве 7 «Ин�тру�ентарий у�равлени� W��dows» и в �лаве � «A���v� D�����o�y S���p���g I��������». Разница между свойствами и методами Не �наю �а� вы, н� � �� вре�ене� ��н�л, чт� вы��н��, в че� ра�ница �ежду �в�й� �тва�и и �ет�да�и, нетрудн� �а�утать��. На данный ���ент �����й нужды в ��� ни�ании эт�й ра�ницы нет, н� е�ли ва� интере�н�, � ра���ажу, �а�, в ��нце ��нц�в, �не удал��ь �рийти � не��т�р��у ��ни�анию данн��� в��р��а. Е�ли вернуть�� � �редыдуще�у ра�делу, ��жн� увидеть, чт� � у���инал � �ет�� де FolderExists �а� � ча�ти ��ъе�та FileSystemObject. А ��че�у FolderExists — эт� �ет�д, а не �в�й�тв�? Ответ на данный в��р�� �в�дит�� � �ледующи� ��н�вны� ��л�жени��: y y Св�й�тва �тн���т�� не���ред�твенн� � аспектам ��ъе�та или, е�ли т�чнее, � т�й вещи, ��т�рую �ред�тавл�ет ��ъе�т. y y Св�й�тва ведут �е�� �а� �ере�енные: на них �р��т� ��ылают�� �� и�ени. y y Кажд�е �в�й�тв� в��вращает не��т�р��� р�да �начение. И�влечение �начени� �в�й�тва не �рив�дит � и��енению че���ни�удь, �а�ающе���� ��ъе�та или т�й вещи, ��т�рую �н �ред�тавл�ет. y y Не��т�рые �в�й�тва ���в�л�ют �ри�ваивать и� н�вые �начени�. Те� �а�ы� и��ен�ют�� �ри�на�и ��ъе�та и и�х�дн�й вещи, ��т�рую �н �ред�тавл�ет. y y Мет�ды — эт� т�, чт� �р��ра��а ��ъе�та ��жет дл� ва� �делать. y y Мет�ды ведут �е�� �а� фун�ции и ��д�р��ра��ы и и� ��жн� �ередавать ар� �у�енты. y y Мет�ды не ����аны в��вращать �начение, н� не��т�рые и� них делают эт�. y y Вы��в �ет�да ��жет и��енить чт��ни�удь, �а�ающее�� ��ъе�та или вещи ре� альн��� �ира, ��т�рую �н �ред�тавл�ет. Стал� �ыть, FolderExists �вл�ет�� �ет�д��, �����ль�у е�у �ередает�� ар�у�ент (и�� т��� файла, ��т�рый нужн� найти�. Св�й�тва не нуждают�� в ар�у�ентах, ��т��у чт� �ни �тн���т�� � внутренни� атри�ута� �а���� ��ъе�та. П� �ути, �ни не нуждают�� в д���лнительн�й инф�р�ации дл� т���, чт��ы вернуть �начение.
Использование объектов в VBScript 121 О �в�й�твах нужн� у����нуть в�т еще чт�: в� �н��их �луча�х �в�й�тва ��ж� н� и вычи�лить (�р�верить их �начение� и �ри�в�ить и� н�в�е �начение. В эт�� ��ы�ле �ни ра��тают �а� �ере�енные. Ра�ница в �ледующе�: ���да �в�й�тву �ри�ваивает�� н�в�е �начение, �р��ра��а ��ъе�та вн��ит ���твет�твующие и�� �енени� в реальную вещь, �ред�тавленную ��ъе�т��. На�ри�ер, �ри�ваивание н�в��� �начени� �в�й�тву Name ��ъе�та File �рив�дит � и��енению на�т��ще�� и�ени файла: WScript.echo file.Name ' определение значения свойства file.Name = "newname" ' присваивание свойству нового значения Те� не �енее �ледует ���нить, чт� не��т�рые ��ъе�ты не ра�решают и��ен�ть �начение �в�й�тва. В эт�� �лучае в д��у�ентации �� ��ъе�ту та�ие �в�й�тва на� �ывают�� �в�й�тва�и только для чтения. А не��т�рые ��ециали�ир�ванные ��ъ� е�ты у�тр�ены та�, чт� и��енение �в�й�тв ��ъе�та не �рив�дит � не�едленн��у и��енению т�й вещи, ��т�рую �ред�тавл�ет ��ъе�т д� тех ��р, ���а ва�и не �удет и���ль��ван ��ециальный �ет�д, ��т�рый «фи��ирует» и��енение. И ���ть же, эт� ���варивает�� в д��у�ентации �� ��ъе�ту (� та�их ��ъе�тах �ы ����в�ри� в �ледующих �лавах�. Вложенные объекты В�т еще �дн� ���т��тель�тв�, �а�луживающее вни�ани�: ��вершенн� не����а� тельн� ��хран�ть �аждую ��ыл�у на ��ъе�т в �ере�енн�й. В �редыдуще� �ри�ере, в ��т�р�� �т��ражала�ь инф�р�аци� � файле Notepad.exe, е�ли нужн� т�ль�� ��� ���треть на дату ���дани�, ��жн� �р��у�тить эта� ��хранени� ��ыл�и на ��ъе�т File в �ере�енн�й file и в����ль��вать�� �ледующи�и ��ерат�ра�и: set fso = CreateObject("Scripting.FileSystemObject") WScript.echo "Файл Notepad.exe был создан ",_ fso.GetFile("c:\windows\notepad.exe ").DateCreated В эт�� �лучае V�S���p� ��ылает�� на fso дл� вы��ва �ет�да GetFile, и в��� вращенна� ��ыл�а на ��ъе�т и���ль�ует�� дл� и�влечени� �в�й�тва DateCreated. В �ценари�х та��е и���ль��вание не���ль�их ур�вней ��ъе�т�в в�тречают�� д�� в�льн� ча�т�, эт�т �рие� на�ывает�� вложенной ссылкой на объект. При ра��те � ��ъе�та�и M���oso�� Wo�d та�а� �ра�ти�а �читает�� в��лне ��ыч� н�й. В �ценари�х или �а�р��ах Wo�d ча�т� ���адают�� ��ерат�ры �ледующе�� вида: ActiveDocument.PageSetup.Orientation = wdOrientLandscape ActiveDocument.PageSetup.TopMargin = InchesToPoints(0.5) ActiveDocument.PageSetup.BottomMargin = InchesToPoints(0.5) ActiveDocument.PageSetup.PageWidth = InchesToPoints(11) В данн�� �ри�ере ��ъе�т ActiveDocument в��вращает ��ъе�т PageSetup, и�ею� щий �в�й�тва orientation и margin, �начени� ��т�рых ��жн� у�тан�вить. С�хранив ��ыл�у на ��ъе�т PageSetup �ри ���дании эт��� �ценари�, ��жн� �э��н��ить не� �н��� вре�ени на на��ре те��та: set ps = ActiveDocument.PageSetup ps.Orientation = wdOrientLandscape ps.TopMargin = InchesToPoints(0.5) ps.BottomMargin = InchesToPoints(0.5) ps.PageWidth = InchesToPoints(11)
122 Глава 3. Создание сценариев и работа с объектами Между �р�чи�, в V�S���p� и�еет�� ��ециальна� �р��ра��на� ��н�тру�ци�, и���ль�ующа� ��ерат�р �� и�ени With, ��т�рый ���в�л�ет еще ��льше у�р��тить �адачу. Предыдущий �ри�ер ��жн� �ере�и�ать �ледующи� ��ра���: with ActiveDocument.PageSetup .Orientation = wdOrientLandscape .TopMargin = InchesToPoints(0.5) .BottomMargin = InchesToPoints(0.5) .PageWidth = InchesToPoints(11) end with О�ерат�р With ���в�л�ет ��ределить ��ыл�у на ��ъе�т, ��т�ра� �ежду �лючевы� �и �л�ва�и With и End With �ерет�� �а� ��ъе�т «�� у��лчанию». Внутри ��ерат�ра With ��жн� ��ылать�� на �ет�ды и �в�й�тва ��ъе�та �� у��лчанию, �редвар�� их не и�ене� �ере�енн�й, а т�ч��й. Эт� не т�ль�� э��н��ит вре�� на на��ре те��та, н� и у�р�щает чтение, а та�же у�еньшает ра��чую на�ру��у на V�S���p�, у���р�� те� �а�ы� вы��лнение ваше�� �ценари�. ▼) Если нужно, внутри оператора With можно сослаться на другие объекты, воспользовавшись полной формой синтаксиса «объект.метод.и _так _далее». Освобождение объектов При ���дании ��ъе�та W��dows а�тивирует �ерверную �р��ра��у �ла��а ��ъе�та, чт��ы у�равл�ть ��ъе�т�� в ваших интере�ах. При и���ль��вании Scripting. FileSystemObject �дин и� этих ��ъе�т�в ���дает�� ��ычн� в �а��� начале �ценари� и и���ль�ует�� �� в�е�у �ценарию. К��да �ценарий �авершает �в�ю ра��ту, W��dows ��в���ждает ���данный ва�и ��ъе�т. Пр��ра��а �ервера �ла��а �ерет на �е�� вы�в���ждение �ани�ае��й и� �а� ��ти и дру�ие ���ут�твующие ра��ты, ��эт��у ва� не�аче� �� эт�� �е�����ить��. Н�, е�ли �ценарий и���ль�ует�� дл� ���дани� �н�же�тва ��ъе�т�в, ��жет в��ни�нуть �итуаци�, �ри ��т�р�й �удет целе����ра�н� ��в���дить эти ��ъе�ты �вны� ��ра��� �� ���нчании их и���ль��вани�. На�ри�ер, �ценарий, ��т�рый ���дает не���ль�� д��у�ент�в Wo�d, д�лжен �ри�а�ать Wo�d �а�рывать �аждый д��у�ент, ���да ра��та � ни� �удет �авершена, а �ате� �ценарий д�лжен ��в���дить ��ъе�т д��у�ента, чт��ы у ва� не ��тавали�ь �дн�вре�енн� �т�рыты�и ��тни д�� �у�ент�в. М�жн� в��лне ��ределенн� ����щить ��ъе�ту � �авершении ра��ты � ни�, у�та� н�вив дл� �ере�енн�й, в ��т�р�й ��держит�� ��ыл�а на ��ъе�т, �начение Nothing. При�еры та���� ��в���ждени� �удут �риведены далее. Работа с коллекциями Е�ли ���р��ить у ��ъе�та Scripting.FileSystemObject файлы или ��д�атал��и, ��� держащие�� в �а��е или на ди��е, т� ��жет ��над��ить�� вернуть �ра�у не���ль�� ��ъе�т�в файл�в — File или �а��� — Folder. Чт��ы ��равить�� � эт�й �адачей, ��ъе�т в��вращает �дин�чную коллекцию ��ъе�т�в, ��держащую внутри �е�� в�е
Использование объектов в VBScript 123 ��ъе�ты File или Folder. П��ле эт��� ��жн� и�учить ��держи��е ��лле�ции, чт��ы �����треть на �тдельные эле�енты. В ��ъе�те���лле�ции е�ть �в�й�тв� Count, ����щающее � ��личе�тве нах�д�� щих�� внутри эле�ент�в, и �в�й�тв� Item, в��вращающее у�а�анный эле�ент и� ��лле�ции. Они ���в�л�ют �ред��л�жить, чт� дл� выв�да и�ен файл�в ��рнев�й �а��и ваше�� же�т���� ди��а ��жн� на�и�ать �ледующий �ценарий: set fso = CreateObject("Scripting.FileSystemObject") set files = fso.GetFolder("c:\").Files for i = 1 to files.Count WScript.echo files.Item(i).Name next Н� эт�т �ценарий ра��тать не �удет. При ра��те � ��лле�цией �а��и �в�й�тв� Item не ���в�л�ет и�вле�ать эле�енты �� н��ера�. Он� тре�ует у�а�ани� имени ��н�ретн��� тре�уе���� ��ъе�та, а е�ли и�ена еще не и�ве�тны, ��ль�ы �т не�� не та� уж и �н���. Каждый ��ы� �ценариев �ред��тавл�ет ������ ��анир�вани� ��лле�ций �е� �редварительн�й инф�р�ации �� их ��держи���. В V�S���p�, на�ри�ер, �ред�� �тавл�ет�� ��ециальна� вер�и� ци�ла For, ��т�ра� на�ывает�� «дл� �ажд���» — For Each. ШАБЛОН Для сканирования объектов именованной коллекции в VBScript, используется следующий цикл For Each: for each переменная_объекта in коллекция операторы, использующие переменную_объекта next Ци�л For Each ���лед�вательн� вы��лн�ет в�е �в�и ��ерат�ры �� �дн��у ра�у дл� �ажд��� ��ъе�та ��лле�ции, а переменная_объекта ���дает�� дл� ���че� редн�й ��ыл�и на �аждый �тдельный ��ъе�т. Те�ерь, �ри и���ль��вании ци�ла For Each и �ере�енн�й �� и�ени file дл� хранени� �тдельных ��ъе�т�в, �ред� �тавл�ющих файлы, наш �ценарий выв�да ��и��а ��держи���� �а��и д�лжен �ара��тать: set fso = CreateObject("Scripting.FileSystemObject") set files = fso.GetFolder("c:\").Files for each file in files WScript.echo file.Name next М�жн� даже в����ль��вать�� �ледующей ��лее ����а�тн�й вер�ией: set fso = CreateObject("Scripting.FileSystemObject") for each file in fso.GetFolder("c:\").Files WScript.echo file.Name next Те�ерь, е�ли вы не �ланируете ���дани� �ценариев на �а�их�ни�удь дру�их ��ы�ах, �ерех�дите � и�учению ра�дела «И���ль��вание ��ъе�та WS���p�» данн�й �лавы, �де �удет дана д���лнительна� инф�р�аци� �� эт�� в�тр�енн�� ��ъе�те.
124 Глава 3. Создание сценариев и работа с объектами Использование объектов при работе с JScript JS���p�, �а� и V�S���p�, �вл�ет�� �у�у�� ��ъе�тн���риентир�ванны� ��ы���, ��� эт��у �жидает��, чт� �р��ра��и�ты дл� ра�ширени� е�� в����жн��тей �удут и�� ��ль��вать ��ъе�ты. JS���p� �ред��тавл�ет 11 в�тр�енных ти��в ��ъе�т�в, и ��жн� ���давать в �ценари�х универ�альные и �тру�турир�ванные ти�ы ��ъе�т�в. Зде�ь внутренние ти�ы ��ъе�т�в ра���атривать�� не �удут, �����ль�у данна� �ни�а ��� �в�щена ���данию внешних �ценариев и ��ъе�т�в у�равлени� W��dows. Внешние ��ъе�ты COM�A���v�X ���дают�� � и���ль��вание� ��ерат�ра new: имя_переменной = new ActiveXObject("имя_объекта"); Зде�ь имя_переменной �вл�ет�� ��ъ�вленн�й �ере�енн�й, �редна�наченн�й дл� ��лучени� ��ыл�и на н�вый ��ъе�т. П��ле т��� �а� �ере�енна� ��ъе�та ��ажет� �� в ваше� ра���р�жении, д��ту� � �ет�да� и �в�й�тва� ��жн� �удет ��лучить � ����щью выражений переменная.имя_свойства или переменная.имя _метода. Ра����три�, � �ри�еру, не��льш�й �ценарий, ����щающий � т��, е�ть ли на ваше� ди��е C: �а��а �� и�ени \windows: var fso; fso = new ActiveXObject("Scripting.FileSystemObject"); if (fso.FolderExists("c:\\windows")) WScript.echo("Папка по имени c:\\windows существует"); Кру�лые �����и д�лжны и���ль��вать�� �ри �ажд�� вы��ве �ет�да, даже е�ли в��вращае��е �начение не и���ль�ует��. О�ерат�ры, ��д��ные WScript.echo "Эта папка называется c:\windows" д��у�ти�ы в V�S���p�, н� в Js���p� та�а� ф�р�а �а�рещена. Чувствительность к регистру символов Ра��та� в �реде WSH, �р��ра��ы на JS���p� и�еют д��ту� � �ред��ределенн��у ��ъе�ту �� и�ени WScript, ��т�рый �ред��тавл�ет р�д ��ле�ных �ет�д�в и �в�й�тв, �а�ающих�� �реды ��ружени� �ценари�, е�� вы��лнени� и �тлад�и. П����ль�у JS���p� �вл�ет�� ��ы���, чув�твительны� � ре�и�тру �и�в�л�в, дл� и���ль��вани� эт��� ��ъе�та нужн� на�ирать е�� и�� в виде WScript, � �а�лавн�й �у�в�й W, в т�ч� н��ти ��хран�� ���а�анн�е �де�ь на�и�ание. А в�т и�ена �ет�д�в и �в�й�тв ��ъе�т�в A���v�X и COM чув�твительн��тью � ре�и�тру �и�в�л�в не ��ладают. На�ри�ер, JS���p� ���в�л�ет на�ирать WScript. echo или WScript.Echo. Работа с коллекциями Е�ли у ва� уже е�ть �ра�ти�а и���ль��вани� JS���p� � I������� �xp�o��� в �ценари�х �рау�ера или в �ценари�х на �т�р�не �ервера, вы, д�лжн� �ыть, �на���ы � ��ъ� е�та�и, в��вращающи�и ��лле�ции ��ъе�т�в. Мн��ие ��ъе�ты I������� �xp�o��� ���в�л�ют �р�в�дить ��анир�вание ��лле�ции ��ъе�т�в, и���ль�у� и�еющий�� в Js���p� ��ерат�р for...in.
Использование объектов при работе с JScript 125 И те� не �енее ��льшин�тв� дру�их ��лле�ций ��ъе�т�в не ра��тают � ��ерат�� р�� for...in, вынужда� и���ль��вать ��ъе�т�ну�ерат�р Enumerator. Эт� �тн��ит�� � ��льшин�тву ��ъе�т�в, в�тречающих�� в �реде WSH. Js���p����ъе�т Enumerator �ред��тавл�ет ������ ��ращени� � ��лле�ции �уте� ��эле�ентн��� �ере�ещени� в�еред и на�ад �� ��и��у ��ъе�т�в ��лле�ции. Дл� и���ль��вани� ��лле�ции, �ред��тавл�е��й ��ъе�т��, �аданны� �ценари� е� или ��ъе�т�� A���v�X, нужн� �начала �ревратить ее в ну�ерат�р: enumObject = new Enumerator(collectionObject); О�ъе�т Enumerator не и�еет �в�й�тв (в ча�тн��ти, у не�� нет �в�й�тва длины — Length; е�ли нужн� у�нать � ��личе�тве эле�ент�в, эту инф�р�ацию ��жн� ��лу� чить и� �в�й�тва Count и�х�дн�й ��лле�ции�. В не� и�еет�� внутреннее �ред�тав� ление � е�� «���иции» в ��лле�ции и и�еют�� �ет�ды, ���в�л�ющие �ере�ещать те�ущую ���ицию в�еред или на�ад � началу ��лле�ции. И�еющие�� в не� четыре �ет�да �еречи�лены в ��рав�е 3.1 . СПРАВКА 3.1. МЕТОДЫ JSCRIPT-ОБЪЕКТА ENUMERATOR Item В��вращает те�ущий эле�ент ��лле�ции. В��вращае��е �начение �вл�ет�� ��держащи��� в ��лле�ции ��ъе�т�� лю���� ти�а. Е�ли ��лле�ци� �у�та или те�уща� ���ици� не ��ределена, в��вращает�� �тр���в�е �начение undefined. AtEnd В��вращает �улев� �начение: True, е�ли те�ущий эле�ент �вл�ет�� ���лед� ни� в ��лле�ции, е�ли те�уща� ���ици� не ��ределена или е�ли ��лле�ци� �у�та. В �р�тивн�� �лучае в��вращает�� False. moveFirst Делает те�ущи� �ервый эле�ент ��лле�ции. Е�ли ��лле�ци� �у�та, atEnd тут же в��вращает �начение True. moveNext Делает те�ущи� �ледующий эле�ент ��лле�ции. Е�ли ��лле�ци� �у�та или те�ущий эле�ент уже �вл�ет�� ���ледни� в ��лле�ции, �ет�д item в��вращает �начение undefined. Т�ль�� чт� ���данный ну�ерат�р д�лжен �ыть ���ици�нир�ван на �ервую �а� �и�ь авт��атиче��и, н� в�е же лучше �еред те�, �а� �р�вер�ть ��лле�цию �ет�да�и atEnd или item, в����ль��вать�� �ет�д�� moveFirst. ШАБЛОН Для сканирования коллекции объектов по имени obj нужно воспользоваться нумератором: e = new Enumerator(obj); for (e.moveFirst(); ! e.atEnd(); e.moveNext()) { x = e.item(); операторы, использующие x }
126 Глава 3. Создание сценариев и работа с объектами Ра����три� �ри�ер. Следующий �ценарий выв�дит ��и��� и�ен в�ех файл�в в ��рнев�й �а��е ди��а C:: var fso, e, file; fso = new ActiveXObject("Scripting.FileSystemObject"); e = new Enumerator(fso.GetFolder("c:\\").files); for (e.moveFirst(); ! e.atEnd(); e.moveNext()) { file = e .item(); WScript.echo(file.name); } Те�ерь, е�ли вы �ланируете ���давать �ценарии т�ль�� на JS���p�, ��жн� �ерей� ти � и�учению ра�дела «И���ль��вание ��ъе�та WS���p�», �де �удет дана д���лни� тельна� инф�р�аци� �� эт�� в�тр�енн�� ��ъе�те. Использование объектов при работе с ActivePerl A���v�P��� ����ании A���v�S���� ���в�л�ет вы��лн�ть �ценарии на ��ы�е P��� в �реде WSH. Среда �а���� ��ы�а P��� уже ��ладает �н�же�тв�� ин�тру�ент�в дл� ра��ты � файла�и и �етевы�и ��д�лючени��и, и е�ли у ва� уже е�ть д��та� т�чный ��ыт �р��ра��ир�вани� на ��ы�е P���, ��жет в��ни�нуть в��р��, че�� же еще та���� ������на д��авить �� в�е�у эт��у �реда WSH? Ины�и �л�ва�и, �аче� и���ль��вать �s���p� или ws���p� дл� вы��лнени� �р��ра��ы на P���, ���да ��жн� �р��т� на�р��ую �а�у�тить perl.exe? Ответ �а�лючает�� в ��держи��� �реды WSH, и�еюще� �р��тые �ред�тва д�� �ту�а � ��ъе�та� COM, OL� (Au�om���o�� и A���v�X. В �реде WSH и�еет�� ��ле�� ный �ред��ределенный ��ъе�т $WScript. COM���ъе�ты �вл�ют�� �люч��, �т�ры� вающи� д��ту� � �етев�й ��нфи�урации, A���v� D�����o�y и W��dows M���g�m��� I�s��um������o� (WMI�. В����жн�, ва� не �ах�чет�� �в��ывать�� � ��ъе�та�и �ценари� W��dows дл� у�равлени� файла�и и �атал��а�и, н� ради ин�тру�ент�в у�равлени� �и�те��й на WSH в�е же �т�ит ��ратить вни�ание. Выполнение Perl-сценариев в WSH У�тан�вщи� A���v�P��� ���дает два файл�вых �����тавлени� дл� файл�в P���: файлы .pl (P���� �����тавл�ют�� � �р��ра���й Perl.exe, а файлы .pls (P���S���p�F���� �����тавл�ют�� � WSH. Е�ли дл� �р��ра�� на P���, ��т�рые нужн� �а�у�тить в �реде WSH, и���ль�ует� �� �ривычн�е ра�ширение и�ени файла .pl, дл� их �а�у��а нужн� в����ль��вать�� �ледующей ���анд�й: cscript /engine:Perlscript myscript.pl П����ль�у ��жет ��тре��вать�� �а�у�� �ценариев и� ���андн�й �тр��и или и� �xp�o���, в�е �начительн� у�р��тит��, е�ли дл� �р��ра��, �редна�наченных дл� �реды WSH, �удет и���ль��ван� ра�ширение .pls. Т��да ��жн� �удет дважды
Использование объектов при работе с ActivePerl 127 щел�нуть на �нач�е файла в �xp�o��� или в����ль��вать�� дл� �а�у��а файл�в �ценариев �ледующи�и ���анда�и: start myscript.pls myscript cscript myscript.pls а WSH уже �нает, чт� делать дальше. М�жн� та�же и���ль��вать P���S���p� внутри �тру�турир�ванных файл�в .WSF — �� эт�� �удет ра���а�ан� в �лаве 9 «И���ль��� вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и». При на�и�ании на P��� �ценариев, �редна�наченных дл� �а�у��а в �реде WSH, нужн� ���нить � �ледующих важных ���т��тель�твах: y y Нель�� и���ль��вать �ривычные �лючи ���андн�й �тр��и P���, на�ри�ер -w: не����ательные �начени� д�лжны у�танавливать�� не���ред�твенн� в �ценарии. y y Лю�ые ар�у�енты, у�а�анные в �s���p� или ws���p�, не ���ещают�� в �а��ив ARGV. В�е�т� эт��� ар�у�енты ���андн�й �тр��и д�лжны и�вле�ать�� и� ��л� ле�ции $WScript->Arguments. Интерфейс с объектами, используемый в Perl A���v�P��� ��жет в�аи��дей�тв�вать � ��ъе�та�и COM, A���v�X и OL� (Au�om�� ��o��. Ра�ширенный �инта��и� дл� д��ту�а � �ет�да� и�еет �ледующий вид: $имя_объекта->Метод[(аргументы [,...])]; На�ри�ер: $myobject->SomeMethod $myobject->Anothermethod("argument", 47); Дл� д��ту�а � �в�й�тву и���ль�ует�� �ледующий �инта��и� $имя_объекта->{Имя_свойства} На�ри�ер: value = $myobject->{Length}; $myobject->{color} = "Red"; П����ль�у �инта��и�ы дл� д��ту�а � �ет�да� и ��ъе�та� �тличают�� дру� �т дру�а, нужн� и�учить д��у�ентацию �� COM���ъе�та�, чет�� ��ределив, чт� и�енн� вы х�тите и���ль��вать, �в�й�тв� или �ет�д. ▼o При попытке доступа к несуществующему методу или свойству или при опечатке в имени, Perl по умолчанию не генерирует ошибку. В результате просто возвращается неопределенное зна- чение (undef). Это усложняет отладку сценария. Чтобы не угодить в эту ловушку, вставьте в начало каждого файла сценария строку $^W=1; Она заставит Perl выводить сообщение об ошибке при попытке сослаться на неопределенный метод или свойство. Я столкнулся с тем, что сообщение об ошибке может и не объяснить, что причина проблемы состоит в нераспознанном свойстве или методе, но вы, по крайней мере, будете предупреждены.
128 Глава 3. Создание сценариев и работа с объектами Дл� у�тан�в�и �начени� �в�й�тва, д��у��ающе�� чтение и �а�и�ь, е�у ��жн� �р��т� �ри�в�ить �начение: $file->{name} = "newname "; Стандартный ��ъе�т WScript, ��т�рый ��лее ��др��н� �удет ра����трен чуть ���же, �ред��редел�ет�� �ред�й WSH и д��ту�ен �ценарию на ��ы�е P���. На�ри� �ер, те�уща� вер�и� WSH ��жет �ыть выведена � ����щью �ледующе�� �ценари�: $WScript->Echo("Используется версия ", $WScript->Version); М�жн� в����ль��вать�� ��ычн�й дл� P��� ф�р��й вв�да�выв�да и на�и�ать в�е�т� эт��� �ледующий ��ерат�р: print "Используется версия ", $WScript->Version; Н� ��ерат�р print ��уще�твл�ет �а�и�ь в �тандартн�е у�тр�й�тв� выв�� да (stdout�, ��т�р�е �ри �а�у��е �ценари� � ����щью WS���p� (���нн�й вер�ии WSH� не ��ределен�. Сценарий, и���ль�ующий ��ерат�р print, ра��тает ��д у�равление� Cs���p� и не ра��тает ��д у�равление� WS���p�. Дел�, ��нечн�, ваше, н� е�ли нужн� чт��ы ваш �ценарий ра��тал �дина��в� х�р�ш� в лю��й �реде, и�� ��ль�уйте дл� выв�да �ет�д $WScript.Echo. ▼) Perl является языком, чувствительным к регистрам символов, и такие имена переменных со ссылками на объект, как $WScript, должны быть набраны точно так, как они здесь показаны. Но имена методов и свойств объектов к регистру символов нечувствительны. Дл� ���дани� э��е��л�ра ��ъе�та Au�om���o�, OL� или A���v�X ��жн� в��� ��ль��вать�� лю�ы� и� двух �ледующих �ет�д�в. Пр�ще в�е�� в����ль��вать�� �ет�д�� CreateObject, ��т�рый �ред��тавл�ет�� в�тр�енны� ��ъе�т�� $WScript: $myobj = $WScript->CreateObject("Scripting.FileSystemObject"); М�жн� та�же в����ль��вать�� ра�ширение� A���v�P��� W��32::OL�, �ред��тав� л�е�ы� ��ы��� A���v�P���: use Win32::OLE; $excel = Win32::OLE->new('Excel.Application') or die "Создать новый объект OLE не удалось"; Инф�р�ацию �� ра�ширени�� OL� ��жн� найти в файле ��рав�и �� A���v�P���. Работа с коллекциями Не��т�рые COM���ъе�ты, в�тречающие�� в эт�й �ни�е и в дру�их и�т�чни�ах, в��� вращают ��ъе�ты���лле�ции, ��т�рые ��держат ��и��� дру�их ��ъе�т�в. На�ри� �ер, �в�й�тв� Drive ��ъе�та Scripting.FileSystemObject в��вращает ��лле�цию ��ъе�т�в Drive, а �в�й�тв� WScript.Arguments в��вращает ��лле�цию ��ъе�т�в Argument. Св�й�тва и �ет�ды ��ъе�та���лле�ции ра���атривали�ь ранее в эт�й �лаве. П����ль�у эле�енты ��ъе�та���лле�ции не ���ут �ыть ��лучены �� инде��н�� �у �начению (�� �райней �ере, не на�р��ую�, �ни д�лжны �ыть «�р���анир�ваны» � и���ль��вание� ��ъе�та�ну�ерат�ра. Ну�ерат�р �ред��тавл�ет д��ту� � ��ъе�ту� ��лле�ции �уте� ��ддерж�и ��н�ти� те�ущей ���иции в ��и��е, ��т�рую �ате�
Использование объектов при работе с ActivePython 129 ��жн� ��ша��в� и��ен�ть. Дл� ��анир�вани� ��и��а в� вт�р�й ра� нужн� �ере� ве�ти те�ущую ���ицию в начал� ��и��а, а �ате� ���ть ��ша��в� �р�йти ��и���. Дл� ну�ерации ��лле�ции �уще�твуют три ������а. Первый и� них �ред��ла� �ает ���дание �вны� ��ра��� ��ъе�та�ну�ерат�ра, �а� эт� делает�� в �ледующе� �ри�ере: $^W=1; $fso = $WScript->CreateObject("Scripting.FileSystemObject"); $fls = $fso->GetFolder("C:\\ ")->Files; # получение коллекции файлов папки c:\ $n = $fls->{Count}; # определение количества ради любопытства print $n, " files\n"; $enum = Win32::OLE::Enum->new($fls); # создание объекта-нумератора while (defined($file = $enum->Next)) { # поочередное присваивание переменной # $file ссылки на каждый объект print $file->{Name}, "\n"; # вывод имен файлов } В� вт�р�� ������е и���ль�ует�� фун�ци�, ��рывающа� ну�ерат�р: ��ерат�р in в��вращает выражение Win32::OLE::Enum->All(объект), ��т�р�е, в �в�ю �чередь, в��вращает �а��ив P���, �ред��тавл�ющий ��ъе�т���лле�цию. В�е�т� т��� чт��ы, �а� в �редыдуще� �ри�ере, ���давать �ере�енную $enum и и���ль��вать ци�л while, ��жн� на�и�ать �ледующий ��д: foreach $file (in $fls) { print $file->{Name}, "\n"; } Гл�д� на третий ������, нетрудн� д��адать�� � т��, чт� �н �а�лючает�� в ���� дании �а��ива ��д��ъе�т�в, � ��т�р��у �ате� ��жн� ��ратить�� в �вн�� виде: @file = in($fls); for ($i = 0; $i < $fls->{Count}; $i++) { print $file[i]->{Name}, "\n"; } И� этих трех �ет�д�в наи��лее �р��ты� �ред�тавл�ет�� �ет�д � и���ль��вание� ��ерат�ра foreach, �н ���трит�� лучше в�ех и ��держит �еньше �на��в. П��а ва� дей�твительн� не ��над��ит�� �а��ив, � ре���ендую и���ль��вать foreach. А те�ерь, �ри желании, вы ��жете �ерейти � и�учению ра�дела «И���ль��вание ��ъе�та WS���p�», �де �удет дана д���лнительна� инф�р�аци� �� эт�� в�тр�енн�� ��ъе�те WSH. Использование объектов при работе с ActivePython На ��ы�е Py�ho� на�и�ан� �н�же�тв� эффе�тивных CGI��рил�жений (��н�ван� ных на ве��техн�л��и�х�, и ����ани� A���v�S���� �� �в�и� �р�ду�т�� A���v�Py�ho� �рила�ает ��льшие у�или� дл� инте�рир�вани� ��ы�а Py�ho� в �реду ���дани� �ценариев ASP. Эт� ��начает, чт� �н та�же ��жет �ыть и���ль��ван и в �реде WSH.
130 Глава 3. Создание сценариев и работа с объектами В Py�ho�, �а� и в P���, и�еет�� ���атый на��р в�тр�енных и д���лнительных фун�� ций, �ред��тавл�ющих ��лный д��ту� � W��dows API, ��эт��у �р��ра��и�т�в, ра��тающих на ��ы�е Py�ho�, вр�д ли �ильн� �аинтере�уют �адавае�ые �ценарие� �ерви�ные ��ъе�ты, ра���атривае�ые в данн�й �ни�е. И в�е же ��жет ���вить�� желание и���ль��вать �ценарные ��ъе�ты в интере�ах ��вышени� �ерен��и��� �ти ваше�� ��ы�а �ценариев, и еще ��т��у, чт� ��ъе�ты COM�A���v�X �вл�ют�� един�твенны� �������� ��лучени� �р��ра��н��� д��ту�а � �ервера� Au�om���o�, та�и� �а� M���oso�� Wo�d. В �тличие �т P��� Py�ho� � �а���� начала ра�ра�атывал�� �а� ��ъе�тн���ри� ентир�ванный ��ы�. О�ъе�ты, �в�й�тва и �ет�ды — ���тавл�ющие е�� ар�енала. Е�ли � �р��ра��ир�ванию на Py�ho� �ерех�дить, и�е� �а��вые �нани� �� дру�и� ��ы�а� �р��ра��ир�вани�, нужн� уче�ть �ледующие ���т��тель�тва: y y О�ъе�т WScript, ��в�е�е�тн� ра���атривае�ый в данн�й �лаве, �вл�ет�� �ред�� �ределенны� ��ъе�т��. Py�ho� чув�твителен � ре�и�тру �и�в�л�в, ��эт��у ��ыл�а на ��ъе�т д�лжна в т�чн��ти выдерживать ф�р�у WScript. y y Х�т� Py�ho� в цел�� чув�твителен � ре�и�тру �и�в�л�в, � и�ена� �ет�д�в и �в�й�тв COM���ъе�т�в эт� не �тн��ит��. y y В����жн�, �а��й �р��т�й ������ ���дани� ��ъе�т�в A���v�X�COM �а�лючает�� в и���ль��вании �ет�да CreateObject, �ред��тавл�е���� WScript. На�ри�ер: fso = WScript.CreateObject("Scripting.FileSystemObject") files = fso.GetFolder("C:\\") .Files y y Значение �в�й�тву COM���ъе�та нель�� �ри�в�ить на�р��ую. В�е�т� эт��� нужн� в����ль��вать�� выражение� object.SetValue("имя _свойства", новое_значение) y y Py�ho� авт��атиче��и и���ртирует в�е �ред��ределенные ��н�танты, �в��ан� ные � OL����ъе�т�� в ���ент ���дани� э��е��л�ра ��ъе�та. Значени� ��н�тант ���дают�� в виде �в�й�тв ��ъе�та win32com.client.constants. На�ри�ер, е�ли вы �удете ���давать д��у�ент M���oso�� Wo�d, т� �удет ��ределен� и �начение win32com.client.constants.wdWindowStateMinimize. Д���лнительна� инф�р�аци� �� инте�рации COM � Py�ho� �риведена в д�� �у�ентации A���v�S���� дл� �а�ета w��32�om. Работа с коллекциями Py�ho� авт��атиче��и ра���атривает ��ъе�ты���лле�ции COM �а� �еречи�лени�. Са�ый �р��т�й ������ ��анир�вани� ��держи���� �еречи�лени� �а�лючает�� в и���ль��вании ��ерат�ра for...in: fso = WScript.CreateObject("Scripting.FileSystemObject") files = fso.GetFolder("c:\\").Files for file in files: print file.name Те�ерь �ерейде� � �ледующе�у ра�делу, чт��ы ��лучить ��лее ��др��ную ин� ф�р�ацию � в�тр�енн�� ��ъе�те WScript.
Использование объекта WScript 131 Использование объекта WScript WSH �ред��тавл�ет дл� в�ех �ценариев в�ех ��ы��в в�тр�енный ��ъе�т �� и�ени WScript. В� �н��их �ри�ерах, �рив�ди�ых в данн�й �ни�е, и���ль��вал�� �ри� надлежащий эт��у ��ъе�ту �ет�д Echo. В WScript и�еет�� р�д дру�их �ет�д�в и �в�й�тв, ��т�рые ���ут ��а�ать�� ��ле�ны�и �ри на�и�ании �ценариев. Они �еречи�лены в ��рав�е 3.2 . СПРАВКА 3.2. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА WSCRIPT СВОЙСТВА Arguments В��вращает ��лле�цию ��ъе�т�в WshArguments, �ред�тавл�ющую �тр���вые �начени� ���андн�й �тр��и, и���ль��ванн�й дл� �а�у��а WS���p� или Cs���p�. На�ри�ер, е�ли �ценарий �ыл �а�ущен ���андн�й �тр���й WScript myscript.vbs aaa bbb или myscript aaa bbb т� выражение WScript.arguments.item(0) выда�т �начение "aaa", а выраже� ние WScript.arguments.item(1) выда�т �начение "bbb". Выражение WScript. arguments.length выдает ��личе�тв� ар�у�ент�в. Б�лее ��др��н� ар�у�енты �удут ра����трены в �ледующе� ра�деле. BuildVersion В��вращает н��ер, идентифицирующий те�ущую вер�ию W��dows S���p� Hos�. Эт�т н��ер ��жет варьир�вать�� �т вер�ии � вер�ии W��dows, а ��н�вле� ние WSH �р�и�х�дит чере� �ехани�� W��dows Upd���. Случал��ь, чт� в WSH на W��dows 7 дл� эт��� �в�й�тва в��вращал��ь �начение нуль. Я ���неваю�ь, чт� эт� �в�й�тв� ��жет �ыть и���ль��ван� � �а��й�ни�удь ��ль��й. FullName В��вращает ��лн�е и�� �ути и и�� файла �р��ра��ы WSH, �а�у�тившей ваш �ценарий (на�ри�ер, c:\Windows\System32\cscript.exe�. Interactive В��вращает �улев� �начение: True, е�ли �ценарий �а�ущен в интера�тив� н�� режи�е, и False, е�ли �н �а�ущен в �а�етн�� режи�е. Значение дл� эт��� �в�й�тва ��жн� у�тан�вить, и���ль�у� �люч ���андн�й �тр��и //I или //B, или же ��жн� на�р��ую у�тан�вить дл� не�� �начение в �ценарии (на�ри�ер, WScript.Interactive = False�. В �а�етн�� режи�е ��на ����щений и вв�да не ���вл�ют��. Name В��вращает и�� х��т��р��ра��ы �ценари� (на�ри�ер, "Windows Script Host"�.
132 Глава 3. Создание сценариев и работа с объектами Path В��вращает и�� �атал��а, в ��т�р�� ��держит�� х��т��р��ра��а �ценари� (на�ри�ер, "c:\Windows\System32"�. ScriptFullName В��вращает ��лный �уть и и�� файла ваше�� �ценари� (на�ри�ер, "c:\ test\myscript.vbs"�. ScriptName В��вращает и�� файла ваше�� �ценари� (на�ри�ер, "myscript.vbs"�. StdErr, StdIn и StdOut Эт� файл�вые ��т��и, ��т�рые ���ут и���ль��вать�� дл� чтени� и� файл�в �тандартн��� вв�да или дл� �а�и�и в файлы �тандартн��� выв�да и �ши��и. Эти �в�й�тва ра���атривают�� в �лаве 4 «Д��ту� � файла� и � рее�тру». Эти �в�й�тва д��ту�ны т�ль�� �ри �а�у��е �ценари� � ����щью �s���p�, в ws���p� �ни не ра��тают. Version В��вращает вер�ию WSH (на�ри�ер, "Версия 5.7"�. МЕТОДЫ CreateObject(progid [, prefix]) Анал��ичен в�тр�енн�й фун�ции CreateObject. С ар�у�ент�� prefix ���дает ��д�люченные ��ъе�ты, ������ные �в��ывать ���ыти� �� �ценарие�. (С��ыти� в данн�й �ни�е не ра���атривают��.� ConnectObject object, prefix Св��ывает �уще�твующий ��ъе�т �� �ценарие�, и���ль�у� фун�ции ��ра� ��т�и ���ытий, чьи и�ена начинают�� �� �тр���в��� �рефи��а prefix. DisconnectObject object От�лючает �ценарий �т ���ытий ��ъе�та. Echo arg [, arg]... Выв�дит лю��е ��личе�тв� ар�у�ент�в лю���� ти�а. Ар�у�енты �ри эт�� �тф�р�атир�ваны ��д �тр��и и �тделены дру� �т дру�а �р��ела�и. Cs���p� �а� �и�ывает их на �тандартный выв�д, а WS���p� �т��ражает их в ���вл�юще��� ��не ����щений. GetObject(filename [, progid ][, prefix]) С��дает ��ъе�т на ��н�ве инф�р�ации, хран�щей�� в файле (на�ри�ер, д�� �у�ент�. Е�ли �р��ра��ный идентифи�ат�р — progid — не у�а�ан, е�� �начение ��редел�ет�� и� ти�а файла. Дл� �в��и ���ытий ��ъе�та �� �ценарие� ��жет �ыть у�а�ан ар�у�ент prefix. Мет�д GetObject ��жет та�же ��лучить ��ыл�у на уже �уще�твующий ��ъ� е�т �уте� у�а�ани� ��ециальн��� и�ени, на�ывае���� псевдонимом (mo��k���. Эт� �удет не�дн��ратн� �р�иллю�трир�ван� в �лавах 7 и �.
Использование объекта WScript 133 Quit [errorcode] Пре�ращает вы��лнение �ценари�. Е�ли у�а�ан� чи�л�в�е �начение, �н� в��вращает�� в �аче�тве ��да вых�да и� �р�це��а, чт� ��жет �ыть и���ль��ван� �ри �а�у��е �ценари� и� �а�етных файл�в. Sleep msec За�тавл�ет �ценарий в��ть �ау�у в msec �илли�е�унд. На�ри�ер, WScript. sleep 1000 �ри��танавливает вы��лнение на �дну �е�унду. И� �еречи�ленных �в�й�тв и �ет�д�в наи��лее ��ле�ны�и �ред�тавл�ют�� Echo и Arguments. А те�ерь давайте �����три�, �а� ��жн� в����ль��вать�� ар�у�ента�и дл� у�равлени� те�, чт� �ценарий делает ���ле �а�у��а. Извлечение аргументов командной строки И���ль��вание ар�у�ент�в ���андн�й �тр��и — ��ычный ������ у�а�ани� инф�р� �ации �ценарию в ���ент е�� �а�у��а. Наи��лее ча�т� эт�т �рие� �ри�ен�ет�� дл� на�и�ани� �ценариев, ра��тающих � файла�и, учетны�и �а�и���и ��ль��вателей или ����ьютера�и. Сценарий д�лжен �ыть на�и�ан универ�альны� ��ра���, чт��ы е�у ��жн� �ыл� у�а�ать ��н�ретные файлы, людей или т���, че� вы ра���ла�аете на ���ент е�� �а�у��а. На�ри�ер, �ценарий дл� ��ра��т�и файла ��жет �ыть на� �и�ан �ледующи� ��ра���: filename = "specialdocument.doc" ' и нструкции для работы с файлом по имени, хранящемся в filename ... Н� е�ли нужн� и���ль��вать эт�т �ценарий дл� ра��ты � дру�и� файл��, е�� нужн� �треда�тир�вать. Е�ли нужен ��лее универ�альный ��дх�д, на�ишите та��й �ценарий, ��т�рый ��лучает и�ена файл�в и� �в�ей ���андн�й �тр��и, чт��ы вы ����ли �р��т� на�ирать чт��ни�удь вр�де: C:\> myscript some.doc another.doc П��ле эт��� �ценарий �удет ра��тать � файла�и, чьи и�ена на�раны, а не � те� файл��, и�� ��т�р��� в�тр�ен� в �ценарий. Ка� �равил�, у �ажд��� ��ы�а �р��ра��ир�вани� и�еет�� �в�й ����твенный ���� ��� �ред��тавлени� ар�у�ент�в ���андн�й �тр��и �р��ра��е, н� в �реде WSH и�е� ет�� т�ль�� �дин ������ их ��лучени� — чере� �в�й�тв� Arguments ��ъе�та WScript. Св�й�тв� WScript.Arguments в��вращает ��лле�цию ��ъе�т�в, �� �дн��у дл� �ажд��� эле�ента, �еречи�ленн��� в ���андн�й �тр��е �ценари�. Сценарий дл� и���ль��вани� этих ар�у�ент�в ��жн� на�и�ать �ри�ли�ительн� та�и� ��ра���: for each filename in WScript.arguments ' инс трукции для работы с файлом по имени, хранящемся в filename ... next Ра�у�еет��, нужн� и���ль��вать т�т �ет�д ра��ты � ��ъе�та�и и ��лле�ци��и, ��т�рый ��дх�дит дл� �ри�ен�е���� ва�и ��ы�а �ценариев (эт�т �ри�ер �риведен дл� V�S���p��. В �ценарии myscript.vbs ���андна� �тр��а C:\> myscript some.doc another.doc
134 Глава 3. Создание сценариев и работа с объектами ���дает ��лле�цию WScript.Arguments � дву�� эле�ента�и: some.doc и another.doc. О�ерат�р for each, и�еющий�� в V�S���p�, ���в�л�ет ваше�у �ценарию �р�ве�ти ���чередную ��ра��т�у этих эле�ент�в. Е�ли в ���андн�й �тр��е не у�а�ать в���ще ни�а�их ар�у�ент�в, эт�т �ценарий ниче�� делать не �удет. И в�е же лучше в та��� �лучае, чт��ы �ценарий ����щал ��ль��вателю, �а� е�� �равильн� и���ль��вать. Следующий ша�л�н ���а�ывает, �а� ���давать �ценарии ���андн�й �тр��и, ��т�рые ���ут �рине�ти в��лне ��ре� деленную ��ль�у. ШАБЛОН Когда сценарий использует аргументы командной строки для определения, с какими файлами (или именами пользователей, компьютерами или чем-нибудь еще) ему работать, то при отсут- ствии аргументов командной строки он должен объяснить порядок его использования: if WScript.arguments.length = 0 then ' Нет аргументов? Вывод информации по использованию ' и за вершение работы WScript.echo "Этот сценарий обрабатывает указанные файлы, " WScript.echo "делая с ними то-то и то-то". WScript.echo "Порядок использования: myscript файл [файл ...]" WScript.quit end if for each filename in WScript.arguments ' с юда помещаются операторы для обработки файла filename ... next В�е�т� эт��� ��жет ��над��ить��, чт��ы �ри �т�ут�твии в ���андн�й �тр��е у�а�аний и�ен файл�в ваш �ценарий ра��тал � файл�� �� у��лчанию. Та��й �ценарий д�лжен и���ль��вать дл� ��ра��т�и файл�в ��д�р��ра��у, чт��ы ее ��жн� �ыл� вы�ывать ли�� � файл�� �� у��лчанию, ли�� � у�а�анны�и файла�и. В V�S���p� эт� вы�л�дит �ледующи� ��ра���: if WScript.arguments.length = 0 then ' нет аргументов в командной строке – обработка файла "default.file" process "default.file" else ' обработка каждого файла, указанного в командной строке for each filename in WScript.arguments process filename next end if sub process (filename) ' инс трукции обработки файла filename ... end sub И���ль��вание ��лее эффе�тивных ти��в ��ра��т�и ���андн�й �тр��и �удет ���а�ан� в �лаве 9.
Поиск и использование необычных объектов 135 Поиск и использование необычных объектов К���ани� M���oso�� в ��рав�чных д��у�ентах �� W��dows S���p���g (на�и�анию �ценариев дл� W��dows� дает ��и�ание р�да эффе�тивных, ча�т� и���ль�уе�ых ��ъе�т�в, �ред��тавл�е�ых W��dows. О�н�вна� ча�ть та�их ��ъе�т�в ра���атри� вает�� в �лавах 4–9 . Е�ли у ва� нет ��ыта на�и�ани� �ценариев, дл� начала в�е�� эт��� �удет в��лне д��тат�чн�, ��эт��у, ��жет �ыть, ва� �т�ит �ра�у �ерейти � и�учению �лавы 4. В д��авление � эти� �тандартны� ��ъе�та� �н��ие ра�ра��тчи�и и ����ании �е��латн� или �а �лату �ред��тавл�ют д���лнительные ��ъе�ты. Н� ��р��н�е ��личе�тв� ��ъе�т�в уже �ри�ут�твует на ваше� ����ьютере, в�е�те � W��dows ���тавл�ют�� ��тни COM���ъе�т�в и ��тни д���лнительных ��ъе�т�в д��авл�� ют�� �ри у�тан�в�е та�их �рил�жений, �а� Wo�d, �x��� и V�s�o. Мн��ие и� них ра�ра��таны т�ль�� дл� и���ль��вани� � �р��ра��а�и ��ределенных �рил�жений и ��вершенн� �е���ле�ны дл� ���дателей �ценариев. Дру�ие же �тн���т�� � уни� вер�альны� ��ъе�та�, �редна�наченны� дл� и���ль��вани� в �ценари�х и ����и� лируе�ых �р��ра��ах. Н� �а� ��жн� у�нать, �а�ие ��ъе�ты у�тан�влены на ваше� ����ьютере и �а�ие и� них ��жн� и���ль��вать дл� ���дани� �ценариев? Е�ли че�тн�, идентифи�аци� ��ъе�т�в не та��е уж �р��т�е дел�, н� е�ли ва� нравит�� ра��та �ыщи�а, читайте ра�дел дальше. Чт��ы ��н�ть, чт� � ��дра�у�евал ��д «��тн��и ��ъе�т�в», в��л�не� на рее�тр W��dows. ▼o Опрометчивые изменения реестра Windows могут привести ваш компьютер в нерабочее со- стояние. Поскольку в Редакторе реестра команда отката к прежнему состоянию отсутствует, постарайтесь при изучении реестра не вносить в него никаких изменений. Дл� �р����тра рее�тра на W��dows 7 или V�s�� щел�ните на �н���е Пуск (S�����, на�ерите в ��ле ��и��а regedit и наж�ите �лавишу Ввод. На W��dows XP щел� �ните на �н���е Пуск (S�����Выполнить (Ru��, на�ерите regedit и наж�ите �ла� вишу Ввод. Ра��р�йте эле�ент ра�дела HKE�_CLASSES_ROOT, �р��рутите ��и��� вни�, �р��у��а� эле�енты вида .xxx-format, и д��ерите�ь, �а� ���а�ан� на ри�. 3 .4, д� ��дра�дел�в � на�вани��и вида «чт��ни�удь�т�ч�а �чт� �ни�удь». Б�льшин�тв� ��дра�дел�в, начина� � эт��� �е�та и далее, �ред�тавл�ют �ла��ы ��ъе�т�в. Чт� �аждый и� них делает, ��жет ��д��а�ать наличие �ара�етра CLSID или CurrVer, на� х�д�ще���� ��д и�ене� ��ъе�та. На ри�. 3.4 у ��дра�дела FaxControl.FaxControl.1 и�еет�� �ара�етр CLSID, �тал� �ыть, эт� ��ъе�т. Эле�ент CLSID (или ���ss ID — идентифи�ат�р �ла��а� — эт� длинн�е, �� �ути дела, �лучайн�е чи�л�, ��т�р�е ���датели ��ъе�т�в и���ль�уют дл� т���, чт��ы дать �в�е�у ��ъе�ту уни�альный «�т�ечат�� �альца». Эле�ент CurrVer, �а� т�т, ��т�рый нах�дит�� ��д эле�ент�� FaxControl.FaxControl, и���ль�у� ет��, ���да е�ть вер��тн��ть у�тан�в�и на ваше� ����ьютере ��лее �дн�й вер�ии �р��ра��ы �ла��а. Значение �ара�етра CurrVer ����щает W��dows, �де �ледует и��ать инф�р�ацию � �ла��е дл� �а��й ���ледней вер�ии ��ъе�та. Найдите эт�т эле�ент, и вы найдете CLSID ��ъе�та.
136 Глава 3. Создание сценариев и работа с объектами Рис. 3 .4 . Классы COM-объектов перечислены в реестре в разделе HKE�_CLASSES _ ROOT, после подразделов вида .xxx. У объектов имеется связанный с ними параметр CLSID Первы� ша��� �ри ра�вед�е н�вых и интере�ных ��ъе�т�в �танет ��на���ление � рее�тр�� в цел�х ��и��а интере�ных и�ен. Дл� �ри�ера, � �р��лежу �а ��ъе�т�� FaxControl.FaxControl.1, ��дра�дел ��т�р��� ���а�ан на ри�. 3 .4 . К��да �удет найден� �начение �ара�етра CLSID ��тенциальн� интере�н��� ��ъ� е�та, найдите ���твет�твующее е�у �начение в ра�деле Компьютер (My Compu����\ HKE�_CLASSES _ROOT\Clsid, �де нах�дит�� инф�р�аци�, ��т�рую и���ль�ует W��dows дл� ��наружени� и �а�у��а файла �р��ра��ы, ��т�ра� у�равл�ет ��ъе�т��. На ри�. 3 .5 ���а�ана инф�р�аци� � �ла��е дл� FaxControl.FaxControl.1. Пара�етр InprocServer32 ���а�ывает т�т �а�ый �р��ра��ный ��дуль (��ычн� эт� файл DLL или OCX�, ��т�рый у�равл�ет ��ъе�т��. В данн�� �лучае эт� �р��ра��а \WINDOWS\system32\Setup\fxsocm.dll. И�� эт��� ��ъе�та и ра��ещение е�� DLL� �и�ли�те�и ��д��а�ывает, чт� е�� ��жн� �удет и���ль��вать дл� на�тр�й�и �луж� �ы ра��ты � фа��и�ильны�и а��арата�и. Н� �а� эт� �делать? Сначала нужн� �р�верить, ��дх�дит ли данный ��ъе�т дл� и���ль��вани� в �ценари�х, �����ль�у не��т�рые ��ъе�ты не ��дх�д�т дл� эт���. П�эт��у в �ер� вую �чередь нужн� ��н�ть, ��жн� ли ���дать ��ъе�т на вы�ранн�� ва�и ��ы�е �ценариев. Дл� эт��� в����ль�уйте�ь и�ене� сервер.объект, найденны� в ра�деле HKE�_CLASSES _ROOT. В V�S���p� эт� �удет вы�л�деть �ледующи� ��ра���: set obj = CreateObject("FaxControl.FaxControl.1") WScript.echo "CreateObject работает!" Е�ли эт�т �ценарий выда�т ����щение �� �ши��е, �начит, ��ъе�т не ��жет �ыть и���ль��ван в �ценари�х. Е�ли �н �а�у�тит�� �е� выдачи ����щени� �� �ши��е, �а� эт� �р�и�х�дит �ри �р�вер�е FaxControl.FaxControl.1, �начит, ��ъе�т �ерв�е �ре� ��т�твие уже �ре�д�лел.
Поиск и использование необычных объектов 137 Рис. 3 .5 . Информация Class ID для объекта FaxControl.FaxControl.1 На �ледующе� эта�е нужн� ��и��ать в Интернете ��ыл�и на и�� ��ъе�та (на� �ри�ер, �р�ве�ти ��и�� �� и�ени FaxControl.FaxControl.1 или FaxControl.FaxControl�. Начинать, на ��й в��л�д, �ледует � ��и���в�й �и�те�ы Goog��. Е�ли увидите ��ыл� �и на �траницы на �айте msdn.microsoft.com, та� ���ут �ыть у�а�атели на ��лную д��у�ентацию дл� и��ледуе���� ��ъе�та. Не �а�удьте та�же ��и��ать в ра�деле Goog�� «Гру��ы» («G�oups»�. Мн��ие �р��ра��и�ты ча�т� ���ещают �ру��ы вида comp.xxx, и, е�ли ��ве�ет, та� ��жн� найти �аархивир�ванные ди��у��ии, �а�аю� щие�� ��ъе�та. (К ��жалению, е�ли и��ать в Goog�� �ведени� � FaxControl.FaxControl, вы, ���рее в�е��, найдете т�ль�� ��ыл�и на �атериалы данн�й �ни�и или ее �ерв��� и�дани�, ��т�р�е на�ывал��ь «W��dows XP U�d�� �h� Hood», н� ��ыл�� на д��у� �ентацию та� не �удет.� Е�ли нель�� найти д��у�ентацию в �ети, M���oso�� или ���датель ��ъе�та ���ут �ред��тавить ��рав�чный файл � ��и�ание� ��ъе�та. П����трите, нет ли в �наче� ни�х �ара�етра рее�тра Clsid ��и��а ��рав�чных файл�в � ра�ширени��и .hlp или .chm. Е�ли та��й ��и��� и�еет��, на�ерите в ��не ���андн�й �тр��и start путевое_имя\файл_справки.xxx �де путевое_имя\файл_справки.xxx �вл�ет�� ��лны� �утевы� и�ене� � файлу ��рав�и, ��т�рый у����нут в рее�тре. Эт�т файл ��жет ���а�ать, �а� ра��тает ��ъ� е�т. Чт� же �а�ает�� ��ъе�та FaxControl.FaxControl.1, у не�� ��рав�чн��� файла нет. ▼) Если файл справки имеет расширение .hlp и вы работаете под Windows 7, Vista или Windows Server 2008, то перед тем как открыть файл с расширением .hlp, нужно будет установить ста- рую программу просмотра файлов справки Windows Help. Зайдите на сайт www.microsoft.com и проведите там поиск по строке «download winhlp32.exe». Е�ли и�ени файла ��рав�и не у�а�ан�, не �т�ит �давать��. П����ль�у COM� ��ъе�ты ра�ра��таны дл� и���ль��вани� в� �н��их ��ы�ах �р��ра��ир�вани�, �ни
138 Глава 3. Создание сценариев и работа с объектами ���ут, е�ли эт��� �т них �ах�тел ра�ра��тчи�, �ред��тавить лю��й �р��ра��е �� ее �а�р��у ��и��� �ет�д�в, �в�й�тв и �в�их ар�у�ент�в. Е�ли ваш таин�твенный ��ъе�т ра���ла�ает та�и� �в�й�тв��, ��жн� �����ать�� в файле �р��ра��ы ��ъ� е�та, чт��ы найти инф�р�ацию �� е�� и���ль��вании. Пр�ще в�е�� эт� �делать � ����щью браузера объектов (obj��� b�ows���, �р�� �ра��ы, ра�ра��танн�й и�енн� дл� та�их и��лед�ваний. M���oso�� �ред��тавл�ет та�ую �р��ра��у �� �н��и�и �в�и�и �рил�жени��и. Е�ли у ва� е�ть M���oso�� Wo�d, �x��� или Pow��Po���, т� Obj��� ��ows�� в�лючен в них �а� ча�ть реда�т�ра �а�р���в — M���o �d��o�. За�у�тите �рил�жение и щел�ните на �ун�тах �еню Разработчик (Too�s�Visual BasicViewObject Browser. Е�ли у ва� у�тан�влена ��л� на� вер�и� ра�ра��тчи�а V�su�� ��s��, �а�у�тите ее и щел�ните на �ун�тах �еню ViewObject Browser. Чт��ы �р����треть инф�р�ацию �� интере�ующе�у �ла��у, нужн� �а�тавить Wo�d (или V�su�� ��s�� и т. д.� �а�л�нуть в файл �р��ра��ы �ла��а. Дл� эт��� щел�ните на �ун�тах �еню Tools, References. Щел�ните на �н���е Browse и найдите DLL� или OCX�файл, ��т�рый �ыл ранее найден в рее�тре. Щел�ните на �н���е Open, и �и�ли�те�а ���вит�� в виде эле�ента � у�тан�вленны� флаж��� в ��и��е Available References, �а� ���а�ан� на ри�. 3 .6 . К��да ти� ��ъе�та вы�ран в ��и��е и на�р�тив не�� у�тан�влен флаж�� в ��ле �� ��и���� Available References, щел�ните на �н���е OK. П��ле эт���, �а� ���а�ан� на ри�. 3 .7, вы�ерите и�� �ла��а и� �и�ли�течн��� ��и��а в верхне� лев�� у�лу ��на Obj��� ��ows��. Вы�ерите ти�ы ��ъе�т�в в ле� в�й �анели, и �рау�ер ���ажет в �рав�й �анели ��д �л�в�� Members и�еющие�� в ��ъе�те �ет�ды, �в�й�тва и �ред��ределенные ��н�танты. М�жн� ���чередн� вы�ирать ��ъе�ты и� эт��� ��и��а, и в нижней �анели �рау�ер �удет ���а�ывать ар�у�енты �ет�да или �р�цедуры, е�ли та��вые и�еют��, и ве�ь ��наруженный и� те��т ��ъ��нени�. Рис. 3 .6 . Выбор библиотеки типа класса объекта для просмотра в Object Browser
Поиск и использование необычных объектов 139 Рис. 3 .7. Просмотр информации типа класса в Object Browser Е�ли ни �дн��� и� у����нутых �н�й �рил�жений у ва� нет, ин�тру�ентальный на��р W��dows XP и W��dows 2000 R�sou��� ���s �ред��тавл�ют еще �дн� �ред�тв�, ��т�р�е на�ывает�� OL��COM Obj��� V��w��. Эт�т на��р ��жн� �а�ру�ить � ве�� �айта www.microsoft.com. А �а�� эт� �ред�тв� ��жн� �а�ру�ить � www.microsoft.com, е�ли �р�ве�ти ��и�� �� �тр��е «OL��COM Obj��� V��w��». П�ль��вать�� �ред�тв�� OL��COM Obj��� V��w�� на�н��� �л�жнее, че� Obj��� ��ows��. В�т не���ль�� ��вет�в �� е�� и���ль��ванию: y y П��р��уйте найти интере�ующий ва� ��ъе�т в ра�делах Object Classes, All Objects. Я ��наружил, чт� не в�е ��ъе�ты, ��т�рые �ен� интере��вали, та� �еречи�лены. На�ри�ер, Scripting.Dictionary �ри�ут�твует, а Scripting.FileSystemObject — нет. Е�ли �де�ь найти ��ъе�т не уда�т��, ��ищите е�� в ра�деле Type Libraries. y y Дл� �р����тра инф�р�ации � �ла��е дважды щел�ните на на�вании �и�ли�те� �и или ��ъе�та. Эта инф�р�аци� ра�ра�атывала�ь дл� �р��ра��и�т�в COM� ��ъе�т�в, а не дл� ��нечных ��ль��вателей, ��эт��у �на ��жет �ыть трудна в у�в�ении. y y Эле�енты Typedef выв�д�т ��и��� �начений не��т�рых �ред��ределенных ��н� �тант, и���ль�уе�ых в�е�и ��ъе�та�и, �ред��тавл�е�ы�и �ервер��. y y Эле�енты Coclass ��редел�ют ��ъе�ты, ��т�рые ���ут �ыть ���даны �ервер�� �ла��а. Е�ли �р����треть ��держи��е эле�ента coclass, ��жн� найти �ред� ��ределенные ��н�танты, �в�й�тва и �ет�ды. Х�т� ��а �рау�ера ��ъе�т�в ���ут ва� ���а�ать, �начени� �а���� ти�а �ет�ды и �в�й�тва �жидают и в��вращают, �ни не ���ут ��д��а�ать, чт� ��начают эти �начени�, ��эт��у дл� ��ределени� ��р�д�а их и���ль��вани� нужн� э���ери� �ентир�вать. Чт� же �а�ает�� FaxControl.FaxControl.1, Obj��� ��ows�� ���а�ывает два �в�й�тва и два �ет�да, �еречи�ленные в ��рав�е 3.3 . В�е эт� в���рини�ает�� д�в�льн� �р��т�. Нет ар�у�ент�в, �ред��тавл�е�ых эти� �ет�да�, �начит, �де�ь не тре�ует�� ра��та �ыщи�а. К т��у же на�вани� ��� в�р�т �а�и �а �е��. Эт�т ��ъе�т ���в�л�ет у�нать, у�тан�влена ли �луж�а фа���в
140 Глава 3. Создание сценариев и работа с объектами (F�x s��v���� и �ринтер фа���в (F�x P�������, и ��жет их у�тан�вить. Н� ра��тает ли в�е эт�? СПРАВКА 3.3. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FAXCONTROL.FAXCONTROL СВОЙСТВА IsFaxServiceInstalled В��вращает �улев� �начение. IsLocalFaxPrinterInstalled В��вращает �улев� �начение. МЕТОДЫ InstallFaxService Ниче�� не в��вращает и не �рини�ает в �аче�тве ар�у�ент�в. InstallLocalFaxPrinter Ниче�� не в��вращает и не �рини�ает в �аче�тве ар�у�ент�в. В�т �р��т�й �ценарий, ��т�рый � на�и�ал дл� �р�вер�и: set obj = CreateObject("FaxControl.FaxControl.1") WScript.echo "IsFaxServiceInstalled =", obj.IsFaxServiceInstalled WScript.echo "IsLocalFaxPrinterInstalled =", obj.IsLocalFaxPrinterInstalled П��ле �а�у��а �ценари� на ����ьютере ��д у�равление� W��dows XP, у ��т�р�� �� и�ел�� ��де�, н� не �ыл� у�тан�вленн�й �луж�ы фа���в, � ��лучил �ледующий ре�ультат: IsFaxServiceInstalled = 0 IsLocalFaxPrinterInstalled = 0 К��да � �а�у�тил �ценарий set obj = CreateObject("FaxControl.FaxControl.1") obj.InstallFaxService �р��ра��а у�тан�в�и W��dows �а�р��ила ��й ����а�т�ди�� � W��dows XP и у�та� н�вила �луж�у фа���в и �ринтер фа���в. П��ле эт��� ре�ультат �а�у��а �ерв��� �ценари� �тал та�и�: IsFaxServiceInstalled = -1 IsLocalFaxPrinterInstalled = - 1 Зде�ь -1 ��начает True (лю��е ненулев�е �начение ��начает True�, �лед�ва� тельн�, ��ъе�т вы��лнил �жидае�ую �т не�� ра��ту. А в�т ва� �ценарий, ��т�рый авт��атиче��и ��е��ечивает у�тан�в�у на ��ль��ватель���й �и�те�е W��dows XP �луж�ы фа���в, а та�же у�тан�в�у фа��а и �ринтера фа���в: set obj = CreateObject("FaxControl.FaxControl.1") if not obj.IsFaxServiceInstalled then WScript.echo "Установка службы факсов..." obj.InstallFaxServic elseif not obj.IsLocalFaxPrinterInstalled then
Поиск и использование необычных объектов 141 WScript.echo "Переустановка принтера факсов..." obj.InstallLocalFaxPrinter else WScript.echo "Принтер факсов готов к работе. " end if Эт� не�л�х�й �ри�ер тех фун�ци�нальных в����жн��тей, ��т�рые ��жн� �ты� ��ать, и��леду� т� �н�же�тв� ��ъе�т�в, ��т�рые ���тавл�ют�� � W��dows. Зде�ь ���а�ана та ра�н�видн��ть �ценариев, ��т�рую ��жн� ���давать дл� у�равлени� ����ьютера�и, ра��тающи�и ��д W��dows, чт��ы дру�и� ��ль��вател�� не �ри� шл��ь �а�и� в��ить�� � Панелью у�равлени�. (В W��dows V�s�� эт�т �ценарий ра��тает т�ль�� в �us���ss, �����p��s� и U���m��� и�дани�х. И�дание Hom� не ���тавл�ет�� �� в�тр�енн�й ��ддерж��й фа��а, �ат� эта ��ддерж�а в�лючена в� в�е вер�ии W��dows 7.�
Доступ к файлам и реестру В эт�й �лаве вы у�наете ��р�д�� и���ль��вани� «��т�вых» ��ъе�т�в, �ред��тавл�е� �ых W��dows S���p� Hos� дл� чтени� файл�в, �а��� и ра��ты � ни�и, дл� на�тр�й�и ��нфи�урации, а та�же дл� чтени� рее�тра и ра��ты � ни�. y y Перед чтение� эт�й �лавы нужн� �а� �ледует у�в�ить �атериал �лавы 3 «С��� дание �ценариев и ра��та � ��ъе�та�и». y y Дл� ��и�ани� в�ех в����жн��тей �ажд��� ��ъе�та �де�ь �р��т� не хватает �е� �та. Я даю �ри�еры наи��лее важных фун�ций, а �����треть на в�е ��тальные д��ту�ные фун�ции ��жн� в ���твет�твующих и�т�чни�ах. y y При чтении �ажд��� ра�дела � �редла�аю �начала �р����треть �еречень �ет�� д�в и �в�й�тв, и�учить �ри�еры, а �ате� вернуть�� и �р����треть ��рав�чные ��и��и. Получение практических результатов В �ервых трех �лавах эт�й �ни�и ра���атривала�ь �реда W��dows S���p� Hos� (WSH�, �рив�дили�ь �рат�ие �ведени� �� �р��ра��ир�ванию на V�S���p� и ��� �а�ывал��ь, �а� и���ль�уют�� ��ъе�ты W��dows COM�A���v�X. Те�ерь �ы �ри� �ту�ае� � �ри�енению ��лученн�й инф�р�ации на �ра�ти�е. В эт�й и в �ледую� щих �лавах ра���атривает�� р�д �чень эффе�тивных ��ъе�т�в, �ред��тавл�е�ых W��dows в ваше ра���р�жение �ри ���дании �ценариев. Эти ��ъе�ты ���ут у�рав� л�ть файла�и, �а�у��ать �р��ра��ы, и��ен�ть ��нфи�урацию W��dows и �����ать в ад�ини�трир�вании �етей. П��ле �ред�тавлени� этих ��ъе�т�в �удут �рив�� дить�� ���на�т��ще�у ��ле�ные �ри�еры �р��ра�� �ценариев, ��т�рые ��жн� и���ль��вать в ��т�в�� виде или �рать �а ��н�ву дл� ���дани� �в�их ����твенных �ценариев. В ��тавших�� �лавах дл� ���дани� �ценариев �ра�тиче��и ��в�е�е�тн� и���ль� �ует�� т�ль�� V�S���p�. Е�ли вы ��ль�уете�ь дру�и�и ��ы�а�и, �ледует �а���нить, чт� не�ави�и�� �т �ри�ен�е���� ��ы�а, ��нце�ци� не и��ен�ет��, и ��ъе�ты ра��� тают абсолютно одинаково. Ва� �ридет�� �рать в ра�чет ��н�ретные ����енн��ти �инта��и�а �ри�ен�е���� ��ы�а и е�� �ет�ды ра��ты � ��ъе�та�и���лле�ци��и, 4
Работа с файлами и папками 143 н� ��веты, ��т�рые �ыли даны в �лаве 3, ���в�л�т �р�делать эту ра��ту �е� ������� труда. ▼) Для тех, кто только приступает к освоению программирования, эта глава начинается с рас- смотрения объекта Scripting.FileSystemObject. Позже в этой и последующих главах будет при- меняться более приемлемый метод изложения материала. Хотя для иллюстрации тех или иных вопросов будут по-прежнему применяться короткие фрагменты программ, я начну показывать более длинные сценарии, чтобы показать, как собрать все общие представления в единое целое для создания полезной программы. Работа с файлами и папками Одн�й и� ��н�вных �ричин, �� ��т�р�й люди �ерут�� �а ���дание �ценариев, �вл�� ет�� ра��та � файла�и и �а��а�и. Х�т� W��dows �xp�o��� у�р��тил и���ль��вание �ыши дл� ���ир�вани� и �ере�ещени� файл�в, ���да нужн� ра��тать � ��льши� ��личе�тв�� файл�в и �а��� �ри и���ль��вании �рафиче����� ��ль��ватель����� интерфей�а, эт� ��жет �ы�тр� �ревратить�� в ве�ь�а ут��ительн�е �ан�тие. В�т р�д �адач, ��т�рые �л�жн� вы��лнить в �xp�o���, н� ле��� ��жн� решить � ����� щью �ценариев: y y �ереи�ен�вание �ра�у не���ль�их файл�в; y y вне�ение и��енений в атри�уты в�ех файл�в в �а��е и в� в�ех лежащих ниже ур�вн�х ��д�а���; y y ра��ечат�а в�ех файл�в M���oso�� Wo�d ра��ер�� �енее 1 М� � US���арты флэш��а��ти � ����щью Wo�d и в�ех файл�в и���ражений � ����щью �р�� �ра��ы P����; y y �ери�диче���е ��анир�вание �а��и на наличие в ней файл�в � ��ределенны� и�ене� или ти��� файла и авт��атиче��а� их ра��ечат�а или �а�а��ни�удь ��ра��т�а. Б�льшин�тв� вы��лн�е�ых �ценари��и �адач, �в��анных � файла�и и �а��а�и, и���ль�уют ��ъе�т FileSystemObject, ��эт��у � не�� и начне�. Scripting.FileSystemObject О�ъе�т Scripting.FileSystemObject ���тавл�ет�� � WSH �а� «в������ательный». Е�� �ет�ды, �в�й�тва и ��д��ъе�ты �ред��тавл�ют ��н�вную ча�ть ин�тру�ента� ри�, не��х�ди���� дл� ра��ты � файла�и. Мн��ие �ценарии V�S���p� начинают�� � ��ерат�ра set fso = CreateObject("Scripting.FileSystemObject") ��т�рый ���дает э��е��л�р ��ъе�та FileSystemObject и ��хран�ет е�� в �ере�енн�й fso. Дл� �ажд��� �ценари� нужн� ���дать т�ль�� �дин э��е��л�р эт��� ��ъе�та. Е�ли �н �удет ���дан в �аче�тве �л��альн�й �ере�енн�й, т� �удет д��ту�ен дл� в�ех ча�тей ваше�� �ценари� и дл� лю�ых е�� ��д�р��ра�� или фун�ций.
144 Глава 4. Доступ к файлам и реестру ▼) В некоторых примерах фрагментов сценариев, которые будут показаны в данной главе, я исполь- зую объект, названный fso, не показывая при этом в явном виде вызов функции CreateObject. В любом из этих примеров можно предположить, что fso — это объект FileSystemObject, создан- ный в самом начале сценария. Св�й�тва и �ет�ды ��ъе�та FileSystemObject �еречи�лены в ��рав�е 4.1 . Мн�� �ие и� них �удут и���ль��ваны в дальнейших �ри�ерах. Ар�у�ента�и �ет�д�в ��ъе�та Scripting.FileSystemObject, е�ли в ��и�ании не ���в�рен� чт��ни�удь дру��е, �лужат �тр��и. ▼) В тех свойствах и методах, которые вызываются для имени файла или имени папки, можно указывать полное путевое имя, начинающееся с буквы диска, или же указывать относительный путь. Если используемый путь не начинается с буквы диска, предполагается, что он принадле- жит текущему диску. Если путь не начинается с символа обратного слэша, предполагается, что он задан относительно текущего рабочего каталога на текущем или указанном диске. Напри- мер, если при запуске сценария текущим является каталог c:\text, Windows интерпретирует путь \temp как c:\temp, а имя файла subfolder\something.doc — как c:\text\subfolder\something.doc. СПРАВКА 4.1. СВОЙСТВО И МЕТОДЫ SCRIPTING.FILESYSTEMOBJECT СВОЙСТВО Drives В��вращает ��лле�цию ��ъе�т�в Drive, �� �дн��у ��ъе�ту дл� �ажд��� фи�иче����� или �т��раженн��� �етев��� ди��а, и�еюще���� на л��альн�й �ашине. МЕТОДЫ BuildPath(путь, имя) Д��авл�ет и�� файла � и�ени �ути и в��вращает ��ъединенную �тр��у. Следует ���нить � д��авлении не��х�ди�ых �и�в�л�в : или \. На�ри�ер, fso. BuildPath("C:\temp","file.dat") в��вращает "C:\temp\file.dat". CopyFile источник, приемник [,перезапись] К��ирует �дин или не���ль�� файл�в и� �дн��� �е�та в дру��е. Е�ли нужн�, в ар�у�енте источник в и�ени файла ���ут ��держать�� �и�в�лы��а�е�тители. Ар�у�ент приемник ��жет �ыть и�ене� файла или �а��и. Е�ли у�а�ан �улев ар�у�ент перезапись, и�еющий �начение False, и е�ли �а��а��рие�ни� уже ��� держит файл � та�и� же и�ене�, �а� и у файла�и�т�чни�а, �ценарий �ре�ращает ра��ту � выдачей �ши��и; в �р�тивн�� �лучае �уще�твующие файлы �ере�а� �и�ывают��. П� у��лчанию дл� ар�у�ента перезапись и���ль�ует�� �начение True. В��вращае�ые �начени� �т�ут�твуют, ��эт��у �ри вы��ве �ет�да �ру�лые �����и и���ль��вать не нужн�. CopyFolder источник, приемник [,перезапись] К��ирует �а��у, у�а�анную в ар�у�енте источник и� �дн��� �е�та в дру��е. В �е�те � ней ���ируют�� та�же в�е файлы и ��д�а��и. Е�ли �а��а приемник
Работа с файлами и папками 145 уже �уще�твует, ��держи��е �а��и источник д��авл�ет�� � ��держи���у �а��и приемник, и дл� ��держи���� вы�тавление ар�у�ента перезапись ра��тает т�чн� та� же, �а� и в �лучае �ри�енени� �ет�да CopyFile. У�а�ание �и�в�л�в��а�е� �тителей в и�ени источника ���в�л�ет ���ир�вать �ра�у не���ль�� �а���, н� �и�в�лы��а�е�тители ���ут и���ль��вать�� т�ль�� в ���ледне� и�ени �ути. CreateFolder(имя_папки) С��дает �а��у и в��вращает ��ъе�т Folder, �ред�тавл�ющий н�вую �а��у. Е�ли �а��а уже �уще�твует, �ет�д �енерирует �ши��у, ��эт��у �еред вы��в�� CreateFolder нужн� и���ль��вать дл� �р�вер�и �уще�тв�вани� �а��и �ет�д FolderExists. Мет�д CreateFolder ���дает в у�а�анн�� �ути т�ль�� �а��у �а��� �� нижне�� ур�вн�. Вы��в fso.CreateFolder("C:\a\b\c") ра��тает т�ль�� е�ли �тру�тура C:\a\b уже �уще�твует. Чуть ���же в данн�й �ла� ве �удет ���а�ан�, �а� на�и�ать ��д�р��ра��у, ������ную ���давать ��д�а��у даже �ри �т�ут�твии �а��� ��лее вы������ ур�вн�. CreateTextFile(имя_файла[, перезапись[, юникод]]) С��дает файл � у�а�анны� и�ене� и в��вращает ��ъе�т те��т�в��� ��т��а — TextStream, ��т�рый ��жет и���ль��вать�� дл� чтени� файла или �а�и�и в не��. Те��т�вые ��т��и �удут ра����трены чуть ���же в данн�й �лаве. М��ут и���ль��вать�� �ледующие не����ательные ар�у�енты: y y перезапись — е�ли эт�т ар�у�ент ��ущен или и�еет �начение True и у�а�ан� ный файл уже �уще�твует, и�х�дный файл удал�ет��, и в�е�т� не�� ���да� ет�� н�вый файл. Е�ли эт�т ар�у�ент у�а�ан �а� False, а та��й файл уже �уще�твует, в��ни�ает �ши��а. П� у��лчанию и���ль�ует�� �начение True. y y Юникод — е�ли эт�т ар�у�ент у�а�ан и и�еет �начение True, файл ���дает�� � ��дир�в��й Юни��д. Е�ли эт�т ар�у�ент ��ущен или и�еет �начение False, файл ���дает�� � и���ль��вание� ��дир�в�и ASCII. DeleteFile спецификация_файла[, принудительно] Удал�ет у�а�анный файл. Удал�е�ый файл не ���ещает�� в К�р�ину, а и�че� �ает �е�в��вратн�. Файлы т�ль�� дл� чтени� не удал�ют��, ���а �улев ар�у�ент принудительно не �удет и�еть �начение True. С ����щью �и�в�л�в��а�е�тите � лей, и���ль�уе�ых в т�й ча�ти спецификации_файла, ��т�ра� �ред�тавл�ет и�� файла, ��жн� удалить �ра�у не���ль�� файл�в. DeleteFolder спецификация_папки[, принудительно] Удал�ет у�а�анную �а��у �� в�е� ее ��держи�ы�. Удаленные файлы и �а��и не ��хран�ют�� в К�р�ине. Па��и и файлы т�ль�� дл� чтени� не удал�ют��, ���а �улев ар�у�ент принудительно не �удет и�еть �начение True. Е�ли ар�у�ент принудительно ��ущен или и�еет �начение False и е�ли �ет�д DeleteFolder �т�л�нет�� � файл�� т�ль�� дл� чтени�, �н �ре�ращает ра��ту, не �авершив вы��лнение �адачи, и выдает �ши��у. Е�ли в и�х�дн�� и�ени и�� ��ль��вать �и�в�лы��а�е�тители, ��жн� удалить �ра�у не���ль�� �а���, н� �и�в�лы��а�е�тители ���ут и���ль��вать�� т�ль�� в ���ледне� и�ени �ути.
146 Глава 4. Доступ к файлам и реестру DriveExists(диск) В��вращает True, е�ли у�а�анный ди�� (на�ри�ер, «�:»� �уще�твует; в �р�� тивн�� �лучае в��вращает False. FileExists(имя_файла) В��вращает True, е�ли у�а�анный файл �уще�твует; в �р�тивн�� �лучае в��вращает False. FolderExists(папка) В��вращает True, е�ли у�а�анна� �а��а �уще�твует; в �р�тивн�� �лучае в��вращает False. GetAbsolutePathName(спецификация_пути) В��вращает а���лютн�е и�� файла или �утев�е и�� и� лю���� и�ени фай� ла или �утев��� и�ени. Е�ли у�а�анный �уть и�еет �тн��ительный ф�р�ат, дл� ���тр�ени� а���лютн��� �ути и���ль�ует�� те�ущий �атал��. На�ри�ер, е�ли те�ущи� �вл�ет�� �атал�� c:\ext, �ри �а�у��е �ценари� выражение fso. GetAbsolutePathName("some.doc") в��вращает �тр��у "c:\text\some.doc". GetFileVersion(путевое_имя) При �ередаче ��лн��� �утев��� и�ени и���лн�е��й �р��ра��ы W��dows или ��дул� дина�иче��и ��д�лючае��й �и�ли�те�и — Dy��m�� L��k L�b���y (DLL�, в��вращает идентифи�аци�нную �тр��у вер�ии, хран�щую�� в файле. При �т�ут�твии в файле инф�р�ации, ���в�л�ющей ��ределить вер�ию, или �ри �т�ут�твии файла в��вращает �у�тую �тр��у. Ти�ичн�е в��вращае��е �на� чение ��жет и�еть �ри�ерн� �ледующий вид: "6.1 .7600.0". GetBaseName(путевое_имя) В��вращает �а��в�е и�� у�а�анн��� файла, и��люча� �уть или ра�ширение файла. Е�ли путевое_имя �вл�ет�� и�ене� �ути и не ��держит и�� файла, �ет�д в��вращает и�� ���ледней �а��и в �ути. Н� в та��� �лучае �удьте ��т�� р�жны: е�ли у ���ледней �а��и е�ть нечт� ��х�жее на ра�ширение файла (.xxx�, �ет�д GetBaseName эту ча�ть удалит. Е�ли нужн� и�влечь и�� ���ледней �а��и в �ути, в����ль�уйте�ь лучше �ет�д�� GetFileName. GetDrive(спецификация_диска) В��вращает ��ъе�т Drive, ���твет�твующий у�а�анн��у диску. Х�т� �ыл� �ы не�л�х�, чт��ы �ет�д GetDrive и��ал �у�ву ди��а, у�а�анную в специфика ции_диска, е�у нель�� �ередавать ��лн�е �утев�е и��. Е�ли вы ���ытаете�ь эт� �делать, �ценарий ��енерирует �ши��у. Дл� и�влечени� �дн��� т�ль�� на�вани� ди��а ��жн� в����ль��вать�� �ет�д�� GetDriveName. GetDriveName(путь) В��вращает и�� ди��а, и���ль��ванн�е в у�а�анн�� �ути. GetExtensionName(путь) В��вращает ра�ширение и�ени дл� ���ледне�� файла или �а��и в �ути, т� е�ть лю�ые �и�в�лы, ��т�рые нах�д�т�� ���ле ���ледней т�ч�и в и�ени. (М�жет �ри��дить�� дл� ��лучени� ра�ширени� и�ени файла, н� �е���ле�ен
Работа с файлами и папками 147 �ри и���ль��вании и�ен �а���, �����ль�у �� те� или ины� �ричина� и�ена� �а��� ра�ширени� �ри�ваивают�� д�в�льн� ред��.� GetFile(спецификация_файла) В��вращает ��ъе�т Scripting.File, ���твет�твующий у�а�анн��у файлу. Зате� эт�т ��ъе�т ��жн� и���ль��вать дл� и��енени� и�ени файла и е�� атри� �ут�в, чт� �удет ра����трен� далее в данн�й �лаве. GetFileName(спецификация_пути) В��вращает и�� файла или и�� ���ледней �а��и в у�а�анн�� �ути. Эт�т �ет�д ��х�ж на �ет�ды GetBaseName и GetExtensionName, н� �н в��вращает ��ъ� единенн�е и�� и ра�ширение. GetFolder(спецификация_папки) В��вращает ��ъе�т Folder, ���твет�твующий у�а�анн��у �утев��у и�ени �а��и (на�ри�ер, "C:\temp"�. Зате� эт�т ��ъе�т ��жн� и���ль��вать дл� и��е� нени� и�ени �а��и и ее атри�ут�в, а та�же дл� и��лед�вани� е�� ��держи���� (эта �адача �удет ра����трена далее�. GetParentFolderName(путь) В��вращает в�е, чт� нах�дит�� выше ���ледне�� эле�ента �ути. Эти� ��ж� н� в����ль��вать�� �ри наличии ��ецифи�ации �ути, не ��держащей и�ени файла. GetSpecialFolder(спецификация_папки) В��вращает ��длинный �уть � у�а�анн�й ��ециальн�й �а��е, ���твет�тву� ющий ее реальн�й у�тан�в�е на л��альн�� ����ьютере. Спецификация_папки �вл�ет�� �дни� и� �ледующих �начений. Константа Значение Описание WindowsFolder 0 П�длинн�е на�вание вашей �а��и W��dows SystemFolder 1 П�длинн�е на�вание �а��и W��dows\Sys��m32 TemporaryFolder 2 Па��а, и���ль�уе�а� дл� вре�енных и в������атель� ных файл�в ▼) Если нужно, чтобы сценарий искал персональные папки, такие как папка Мои документы (My Documents), обратитесь к объекту WScript.Shell, рассматриваемому далее. ▼o WindowsFolder, SystemFolder и TemporaryFolder не являются предустановленными константами. Вам нужно либо определить их в своем сценарии, как в следующем VBScript-операторе const TemporaryFolder = 2 или воспользоваться в своей программе значениями 0, 1 или 2. Уделите этому вопросу особое внимание. Если в VBScript воспользоваться одним из этих имен без его определения, интерпре- татор будет использовать значение по умолчанию 0, при указании которого всегда возвраща- ется путь к папке Windows.
148 Глава 4. Доступ к файлам и реестру GetStandardStream(поток) В��вращает ��ъе�т TextStream, ���твет�твующий ��т��а� �тандартн��� вв�да, �тандартн��� выв�да и �тандартн�й �ши��и, и���ль�ующи��� дл� WSH. (При�ен�ет�� т�ль�� ���да �ценарий �а�у��ает�� � ����щью �s���p�.� Ар�у�ент поток ��жет и�еть �дн� и� �ледующих �начений. Константа Значение Описание StdIn 0 В��вращает ��т�� �тандартн��� вв�да StdOut 1 В��вращает ��т�� �тандартн��� выв�да StdErr 2 В��вращает ��т�� �тандартн�й �ши��и GetTempName() В��вращает �р�и�в�льн� ��енерир�ванн�е и��, ��т�р�е ��жет �ыть и�� ��ль��ван� дл� в������ательн��� файла. Ни�а���� и�ени �а��и эт��у �ет�ду не �ередает��. Дл� ���дани� вре�енн��� файла в на�наченн�й вре�енн�й �а��е в����ль�уйте�ь и�ене�, в��вращенны� �ледующи� �р��ра��ны� ��д��: const TemporaryFolder = 2 fso.BuildPath(fso.GetSpecialFolder(TemporaryFolder), fso.GetTempName()) Мет�д GetTempName не ���дает файл; �н дает и��, ��т�р�е, � ��льш�й �те� �енью вер��тн��ти, еще не и���ль�ует�� �а�и��ни�удь уже �уще�твующи� файл��. MoveFile источник, приемник Пере�ещает �дин или не���ль�� файл�в � �дн��� �е�та в дру��е. Источник ��жет �ыть и�ене� файла или и�ене� файла, ��держащи� �и�в�лы��а�е�ти� тели. Приемник ��жет �ыть и�ене� �а��и или и�ене� файла. Е�ли �рие�ни� �вл�ет�� и�ене� �а��и, не �а�удьте в ��нце у�а�анн��� и�ени ���тавить �и�в�л ��ратн��� �лэша (\�, чт��ы �и�те�е W��dows �ыл� ��н�тн�, чт� у�а�ывает�� и�� �а��и, а не файла. Е�ли приемник нах�дит�� на т�� же �а��� т��е (ди��е и ра�де� ле�, �р�и�х�дит ��ычн�е �ереи�ен�вание; в �р�тивн�� �лучае �р�и�х�дит ���и� р�вание � удаление� �ри�инала. Па��а приемник д�лжна �уще�тв�вать �аранее. Е�ли файл приемник уже �уще�твует или и�� источника ��держит �и�� в�лы��а�е�тители, не ���твет�твующие ни �дн��у файлу, в��ни�ает �ши��а. Е�ли �ши��а в��ни�ает в �р�це��е ра��ты � �ере�ещае�ы�и файла�и, в�е уже �ере�ещенные файлы ��тают�� на �в�е� н�в�� �е�те. MoveFolder источник, приемник Пере�ещает �дну или не���ль�� �а��� � �дн��� �е�та в дру��е. Пере�е� щают�� та�же и лю�ые ��д�а��и. Е�ли ���ледн�� �а��а в приемнике еще не �уще�твует, �на ���дает��. OpenTextFile(имя_файла[, режим_ввода_вывода[, создать[, формат]]]) От�рывает у�а�анный файл и в��вращает ��ъе�т TextStream, ��т�рый ��� жет и���ль��вать�� дл� чтени� и� файла, а та�же дл� �а�и�и или д��авлени�
Работа с файлами и папками 149 инф�р�ации в файл. При вы��ве �ет�да ���ут и���ль��вать�� �ледующие не� ����ательные ар�у�енты: y y режим_ввода_вывода — ��редел�ет ������ и���ль��вани� файла. Д��у��ает �ри�енение �ледующих �начений. Константа Значение Описание ForReading 1 От�рывает файл дл� чтени�. Эт� �начение и���ль�ует�� �� у��лчанию ForWriting 2 От�рывает файл дл� �а�и�и. Лю��е уже �уще�тв�вавшее ��держи��е в и�евше��� файле � та�и� же и�ене� унич� т�жает�� ForAppending 8 От�рывает файл дл� �а�и�и и д��авл�ет в�е �а�и�ыва� е�ые данные � ��нцу лю���� уже �уще�тв�вавше�� ��� держи���� y y создать — ��редел�ет, д�лжен ли ���давать�� н�вый файл, е�ли у�а�анн��� файла еще не �уще�твует. Е�ли эт�т ар�у�ент у�а�ан и и�еет �начение True, файл ���дает��. Е�ли эт�т ар�у�ент и�еет �начение False, файл д�лжен �у� ще�тв�вать �аранее. П� у��лчанию и���ль�ует�� �начение False. y y формат — у�а�ывает и���ль�уе�ую в файле ��дир�в�у �и�в�л�в. Д��у��ает �ри�енение �ледующих �начений. Константа Описание TristateTrue От�рывает или ���дает файл, и���ль�ующий Юни��д TristateFalse И���ль�ует ��д ASCII TristateUseDefault И���ль�ует ��д, у�тан�вленный в �и�те�е �� у��лчанию. Эт� �начение и���ль�ует�� в �ет�де, е�ли не у�а�ан� ни� �а��е дру��е �начение Ка� видите, �ет�ды, �ред��тавл�е�ые ��ъе�т�� FileSystemObject, �тн���т�� � дву� ��н�вны� �ате��ри��: ��ле�ны� фун�ци��, �����ающи� ра��тать � и�ена� �и файл�в и �р�вер�ть �уще�тв�вание файл�в и �а���, и �ет�да�, в��вращающи� ��ъе�ты, ���твет�твующие ди��а�, файла� и �а��а�. Сначала �удут ра����трены фун�ции, а �ате� �ы �ерейде� � ��ъе�та� ди���в, файл�в и �а���. Работа с файловыми и путевыми именами В �ценари�х, ра��тающих � файла�и и �а��а�и, ча�т� нужн� вы�траивать ��лные �утевые и�ена �уте� ��ъединени� и�ени файла � �утевы� и�ене�. С эти� �ри� х�дит�� �тал�ивать�� �ри ���ир�вании и �ереи�ен�вании файл�в, ���дании вре� �енных файл�в и т. д . П�лн��тью ��ределенные �утевые и�ена и�еют �ри�ерн� �ледующий вид: c:\users\bknittel\documents\chapter.doc
150 Глава 4. Доступ к файлам и реестру ▼) Кстати, здесь показан путь к моей папке Documents на моем компьютере, работающем под управлением Windows Vista. На компьютере с XP путь будет выглядеть следующим образом: c:\Documents and Settings\bknittel\My Documents. На вашем компьютере такой путь может во- обще выглядеть по-другому. Чуть позже в данной главе, когда будет рассматриваться объект WScript.Shell, я покажу вам, как получить правильный путь к вашим собственным папкам, что- бы ваш сценарий работал с любой версией Windows. С��дание ��лн��тью ��ределенн��� и�ени �уте� ��ъединени� �утев��� и�ени (ди��а и (или� �а��и� � и�ене� файла не �в�дит�� т�ль�� лишь � �р��т�й �адаче ��единени� в�е�те двух ча�тей � �и�в�л�� ��ратн��� �лэша �ежду ни�и, �а� ��� �а�ан� в данн�� �ри�ере: filename = "chapter.doc" path = " c:\users\bknittel\documents" fullpath = path & "\" & filename Пр��ле�а в т��, чт� �т��ни�удь ��жет у�а�ать �уть �а� "a:", ��дра�у�ева� ���ир�вание файла в текущую �а��у ди��а A:. Н�, эта уче�на� �р��ра��а выда�т и�� "a:\chapter.doc", в ре�ультате че�� файл ���адет в корневую �а��у ди��а A:. Б�лее т���, е�ли �т��ни�удь вв�дит та��й �уть, �а� "c:\temp\", �р��ра��а вы� дает �тр��у "c:\temp\\chapter.doc", ��т�ра� техниче��и �вл�ет�� не�рие�ле�ы� и�ене� файла. (Та��е и�� ра��тает, н� ра��читывать на эт� в �удуще� не �т�ит.� Решение эт�й �р��ле�ы �а�лючает�� в и���ль��вании �ет�да BuildPath, �ред�� �тавл�е���� ��ъе�т�� FileSystemObject. Е�� �адача — ��ъединить �ути � и�ена�и файл�в, и �н �ерет в ра�чет в�е т�н���ти эт�й �адачи. Предыдущую уче�ную �р�� �ра��у ��жн� �ере�и�ать �ледующи� ��ра���: filename = "chapter.doc" path = " c:\users\bknittel\documents" fullpath = fso.BuildPath(path, filename) О�ъе�т FileSystemObject ���тавл�ет�� � не���ль�и�и д���лнительны�и �ет�� да�и, �����ающи�и ра��тать � �утевы�и и�ена�и файл�в: GetAbsolutePathName, GetBaseName, GetDrive, GetDriveName, GetExtensionName, GetFileName и GetParent- FolderName. Эти �ет�ды ��жн� и���ль��вать в �ценари�х дл� ра��иени� и�ен файл�в на их ���тавные ча�ти. К �ри�еру, �ри ���дании �ценари�, ��нвертирующе�� ��держи��е �а��и, �а��л� ненн�й GIF�файла�и, в JPG�файлы, нужен ������ �ревращени� �ред��тавленных вх�дных и�ен в нужные вых�дные и�ена файл�в. Пр�ще в�е�� эт� �делать, и���ль� �у� �ет�д GetBaseName, удал�ющий �а� �утевую ча�ть и�ени файла, та� и е�� ра�ши� рение. И�е� в �в�е� ра���р�жении �а��в�е и��, ��жн� �удет дл� ��лучени� желае� ���� и�ени вых�дн��� файла �ри��единить � не�у н�в�е ра�ширение и и�� �а��и. Ра����три� фра��ент �ценари�, ��ра�атывающе�� в�е GIF�файлы в �аданн�й вх�дн�й �а��е, и ���дающе�� и� них JPG�файлы в вых�дн�й �а��е: set fso = CreateObject("Scripting.FileSystemObject") infolder = "C:\pictures\received" outfolder = "C:\pictures\converted" for each file in fso.GetFolder(infolder).Files if ucase(fso.GetExtensionName(file.name)) = "GIF" then basename = fso.GetBaseName(file.name)
Работа с файлами и папками 151 giffile = fso.BuildPath(infolder, basename & ".G IF") jpgfile = fso.BuildPath(outfolder, basename & ". JPG ") convertGIFtoJPG giffile, jpgfile ' ес ли кон вертация прошла успешно, удалить исходный файл if fso.FileExists(jpgfile) then file.Delete end if loop sub convertGIFtoJPG (giffile, jpgfile) . . . (Здесь должна находиться подпрограмма конвертации для создания JPG из GIF. Такая подпрограмма должна, наверное, использовать некий объект, обрабатывающий изображения) . . . end sub Следует ��ратить вни�ание на �ледующие ���енты: y y Ци�л for each вы��лн�ет�� �� �дн��у ра�у дл� �ажд��� файла �а��и, у�а�ан� н�й в �ере�енн�й infolder. Мет�д GetFolder в��вращает ��ъе�т Folder; .Files в��вращает ��лле�цию, ���т��щую и� в�ех файл�в в эт�й �а��е; а for each ��у� ще�твл�ет ���лед�вательный �ере��р в�ех эле�ент�в ��лле�ции. При �ажд�� �р�х�де ци�ла �ере�енна� file ��держит ��ыл�у на ��ъе�т Scripting.File, �ред�тавл�ющий �дин файл. y y Мет�д fso.GetFileExtension(file.name) в��вращает т�ль�� ра�ширение и�ени файла, и�вле�ае��е и� �в�й�тва name ��ъе�та, на ��т�рый ��ылает�� �ере�енна� file (�� ��ъе�те файла речь еще в�ереди�. Мет�д Ucase �ерев�дит �и�в�лы ра�ширени� в верхний ре�и�тр, �редвар�� те� �а�ы� е�� �равнение � "GIF"; в �р�тивн�� �лучае, е�ли �ы у файла �ыл� ра�ширение "gif" (� �и�в�ла�и в нижне� ре�и�тре�, �н� �ы не �р�шл� �равнение. y y О�ерат�ры внутри �тру�туры if ��ра�атывают �аждый и� GIF�файл�в в �а��е, у�а�анн�й в �ере�енн�й infolder. Е�ли в эт�й �а��е ��держат�� не GIF�файлы, �ни �ценарие� не ��ра�атывают��. y y Дл� и�влечени� т�ль�� т�й ча�ти и�ени файла, ��т�ра� �ледует �ра�у ���ле �ути и �еред ".gif", �ценарий и���ль�ует �ет�д GetBasename, ��т�� �н �ри� ��един�ет � ��лученн��у ре�ультату ра�ширение ".jpg" и и���ль�ует �ет�д BuildPath дл� ��ъединени� ��лученн��� ре�ультата � и�ене� вых�дн�й �а��и. В ит��е, дл� �ажд��� GIF�файла, и�еюще���� в �а��е, у�а�анн�й в �ере�енн�й infolder, �дн��ратн� вы�ывает�� ��д�р��ра��а convertGIFtoJPG, ��т�р�й у�а� �ывает�� и�� вв�ди���� GIF�файла и и�� желае���� выв�ди���� JPG�файла. Удаление и переименование файлов Мет�д DeleteFile �вл�ет�� �р��ы� анал���� ���анды del, �а�у��ае��й в ���анд� н�й �тр��е. На�ри�ер, ��ерат�р fso.Deletefile("c:\temp\somefile.tmp") удал�ет файл c:\temp\some�le.tmp. Е�ли вы не уверены, �а��й и�енн� �атал�� �в� л�ет�� те�ущи� ра��чи� �атал���� �ценари�, нужн� у�а�ать ��лный �уть � уда� л�е���у файлу.
152 Глава 4. Доступ к файлам и реестру Дл� �ереи�ен�вани� файла лучше в�е�� ��лучить �ред�тавл�ющий е�� ��ъе�т Scripting.File и и��енить �в�й�тв� ��ъе�та Name. О�ъе�т File �удет ра���атри� вать�� в данн�й �лаве чуть ���же, н� в �аче�тве �редварительн��� �р����тра ��жн� и���ль��вать �ледующий ��ерат�р: fso.GetFile("c:\temp\newfile.tmp").Name = "newfile.doc" Файл ��жн� та�же �ереи�ен�вать � ����щью �ет�да MoveFile. Н� эт�т �ет�д ра���атривает целев�е и�� �а� �утев�е, ��эт��у ��ерат�р fso.MoveFile("c:\temp\newfile.tmp", "newfile.doc") не т�ль�� �ереи�енует файл new�le.tmp, н� та�же и �ере�е�тит е�� и� �а��и c:\temp в те�ущую ра��чую �а��у �ценари�. Е�ли та��й ре�ультат нежелателен, ва� �ри� дет�� и���ль��вать в �аче�тве целев��� и�ени ��лн�е �утев�е и�� файла: fso.MoveFile("c:\temp\newfile.tmp", "c:\temp\newfile.doc") Создание папки Е�ли ва� нужн� ���дать файлы в ��н�ретн�й �а��е или �ере�е�тить их туда, �ыл� �ы не�л�х� и�еть �ценарий, �арантирующий �уще�тв�вание ����наченн�й �а��и, ����енн� е�ли �ценарий �ред��ла�ает�� вы��лн�ть не т�ль�� на ваше� ����твен� н�� ����ьютере. Сделать эт� ��жет �ет�д CreateFolder, �ринадлежащий ��ъе�ту Scripting.FileSystemObject. Е�ли �аду�ан� и���ль��вание �а��и �� и�ени C:\myscript\output, у ва� ��жет ���вить�� ���ла�н ���тавить в �а��е начал� �ценари� �ледующий ��ерат�р, чт��ы нужна� �а��а �ыла в�е�да ��д ру��й: fso.CreateFolder("C:\myscript\output") Н� и���ль��вание та���� ��ерат�ра ��жет �тать �ричин�й в��ни�н�вени� двух �р��ле�: y y Е�ли �а��а уже �уще�твует, WSH ��танавливает вы��лнение �ценари� � вы� дачей ����щени� �� �ши��е. y y Мет�д CreateFolder ��жет ���дать т�ль�� �а��у, нах�д�щую�� в �утев�� и�ени на �а��� ни���� ур�вне. В �риведенн�� �ри�ере, е�ли �а��а C:\myscript еще не �уще�твует, т� �ет�д CreateFolder не ��жет ���дать �ра�у ��е �а��и — и myscript, и output. В данн�� �лучае WSH ���ть ��тан�вит вы��лнение �ценари� и выда�т ����щение �� �ши��е. С����� ра�решени� ��д��ных �р��ле� �а�лючает�� в расширении фун�ци�наль� н��ти в�тр�енн�й фун�ции. Эт� ��жет �ыть �делан� �уте� на�и�ани� ��д�р��ра�� �ы, ��т�р�й ваш �ценарий ��жет в����ль��вать�� дл� вы��лнени� ��лее �ерье�н�й �адачи. Ра����три� �ценарий, ��держащий та�ую ��д�р��ра��у дл� ���дани� �а���, ��т�рый �ред�тавл�ет ����й ра�ширенную вер�ию �ет�да CreateFolder ��д на�вание� CreateFullPath. Первые две �тр��и эт��� �ценари� ��держат �р��тую «��н�вную �р��ра��у», т� е�ть �вл�ют�� ��н�вны� тел�� �ценари�. В�� ��тальна� ча�ть �ценари� �ред�тавл�ет ����й ��д�р��ра��у CreateFullPath: ' Файл примера script0401.vbs set fso = CreateObject("Scripting.FileSystemObject") CreateFullPath "c:\myscript\output"
Работа с файлами и папками 153 ' . .. здесь должен располагаться весь остальной сценарий, в котором проводится ' к ака я-нибудь работа с папкой \myscript\output ' ' --------------------------------------------------------------------- ' Подпрограмма CreateFullPath создает папку, указанную в 'path', ' с оздавая при необходимости и любую промежуточную папку. ' (Примечание: аргумент 'path' указан как 'byval', потому что мы изменяем его ' з нач ени е в нутри подпрограммы). ' --------------------------------------------------------------------- sub CreateFullPath (byval path) dim parent ' временная переменная path = fso.GetAbsolutePathname(path) ' гарантия полного указания пути parent = fso.GetParentFolderName(path) ' получение имени родительской папки if not fso.FolderExists(parent) then ' е сли родительская папка или папки ' н е существуют ... CreateFullPath parent ' ... то они создаются end if if not fso.FolderExists(path) then ' е сли подпапка не существует ... fso.CreateFolder(path) ' ... то она создается end if end sub Эту ��д�р��ра��у ��жн� и���ль��вать в лю��� �ценарии, ��т�рый нуждает�� в ���дании �а��и. С ней ваш �ценарий ни���да не �удет ���ты�ать�� на �уще�тв�� вании тре�уе��й �а��и или на �т�ут�твии р�дитель���й �а��и. ЗАЩИТА АРГУМЕНТОВ В и���ль��ванн�� �де�ь �ри�ере path �вл�ет�� не��ычн�й �ере�енн�й, — эт� ар�у�ент, �ереданный ��д�р��ра��е CreateFullPath вы�ывающей ее �р�� �ра���й. Чт� ��лучает��, ���да и��ен�ет�� �начение ар�у�ента, �ереданн��� фун�ции или ��д�р��ра��е? Суще�твует два ������а �ередачи ар�у�ент�в: �� �начению и �� ��ыл�е. К��� да ар�у�ент �ередает�� �� �начению, ��д�р��ра��а делает «���ию» �начени� ар�у�ента, ��эт��у, е�ли ��д�р��ра��а эту ���ию и��ен�ет, ни�а�их �р��ле� не в��ни�ает. К��да же ар�у�ент �ередает�� �� ��ыл�е, и��енени� ���ут �р�де� лать �уть на�ад � вы�ывающей �р�цедуре, е�ли �начение �вл�ет�� �ере�енн�й, а не выражение�. В V�S���p� и�еет�� в����жн��ть �вн��� ��ъ�влени� ар�у�ент�в �а� �ере� данных �� �начению — byval или �а� �ереданных �� ��ыл�е — byref; �� у��л� чанию в V�S���p� и���ль�ует�� ��ъ�вление byref, ��эт��у е�ли �ы не д��ави� в ��ределение ��д�р��ра��ы CreateFullPath �лючев�е �л�в� byval, и��енени�, �р�и�в�ди�ые � path, �тра��т�� на �ере�енн�й вы�ывающей �р�цедуры. В дан� н�й ��д�р��ра��е лучше у�а�ать byval, чт��ы и��енени� не ���ли �ередавать�� ��ратн�. В наше� �ри�ере эт� �����й р�ли не и�рает, н� е�ли ��д�р��ра��а CreateFullPath �удет и���ль��вать�� в дру�их �ценари�х, т� ��жет и �ы�рать. Следует �а�етить, чт� в JS���p� та��й в��р�� не в��ни�ает, ��т��у чт� та� в�е ар�у�енты в�е�да �ередают�� �� �начению.
154 Глава 4. Доступ к файлам и реестру Ка� в�е эт� ра��тает? П�д�р��ра��а CreateFullPath и���ль�ует �ет�д GetParentFolderName дл� ��лучени� и�ени �а��и, ��т�ра� ра���ла�ает�� выше у�а�анн�й в �ути �а��и ��лее ни����� ур�вн�, т� е�ть и�ени р�дитель���й �а��и, и е�ли та�а� �а��а �т�ут�твует, ���дает �начала эту �а��у. Т�ль�� ��т��, и т�ль�� е�ли эт� не��х�ди��, ���дает�� ���ледн�� у�а�анна� в �ути �а��а. Ве�ь �е�рет эт�й ��д�р��ра��ы �а�лючает�� в ������е ���дани� р�дитель� ���й �а��и: дл� эт��� �на вы�ывает �а�у �е��. Та�и� ��ра���, ��д�р��ра��а CreateFullPath �ри�ен�ет т�чн� та�ую же техн�л��ию дл� ��е��ечени� �уще� �тв�вани� т�й �а��и, ��т�ра� нах�дит�� выше р�дитель���й и та� далее, в�л�ть д� ��рнев�й �а��и. Та�а� техн�л��и� �р��ра��ир�вани� на�ывает�� рекурсией и �читает�� �чень эффе�тивн�й. Наи��лее �р�� ее и���ль��вание �р��вл�ет��, ���да ��жн� ра��ить �адание на не��льшие ча�ти и и���ль��вать дл� ��ра��т�и �ажд�й и� ча�тей �дну и ту же �р�цедуру. Далее в эт�й �лаве �удут ���а�аны и дру�ие �ри�еры ре�ур� �ий. Эта техн�л��и� ����енн� ча�т� в�тречает�� �ри ра��те � �а��а�и, �����ль�у �а��и �а�и �� �е�е ре�ур�ивны. Па��и ��держат дру�ие �а��и, в ��т�рых та�же ��держат�� �а��и. Е�ли е�ть желание на�и�ать �в�и ����твенные �ценарии или �р��ра��ы, и�� ��ль�ующие ре�ур�ию, ���ледуйте тре� ��вета�: y y В начальн�й �тадии ра�ра��т�и и���ль�уйте �тлад�чные ��ерат�ры выв�да инф�р�ации, чт��ы �ценарий ����щал ва�, чт� делает�� в �р�це��е е�� вы��л� нени�. На�ри�ер, �ри ���дании ��д�р��ра��ы CreateFullPath � и���ль��вал �ет�д wscript.echo дл� выв�да �ути в начале вы��лнени� CreateFullPath. Эт� ���в�л�л� �не видеть, ��че�у, ���да и �а� �на �аждый ра� вы�ывает��. y y У�едите�ь в т��, чт� лю�ые �ере�енные, ��т�рые и���ль�уют�� дл� вычи�лени� эле�ент�в внутри ��д�р��ра��ы, �вл�ют�� л��альны�и �ере�енны�и, ���дава� е�ы�и дл� �ажд��� э��е��л�ра ��д�р��ра��ы. П����ль�у �дн�вре�енн� ���ут ра��тать �ра�у не���ль�� ���ий ��д�р��ра��ы CreateFullPath, нужн� у�е� дить�� в т��, чт� �ни не �ытают�� и���ль��вать дл� хранени� инф�р�ации �дни и те же �ере�енные. В ��д�р��ра��е CreateFullPath эт� делает�� � ����щью ��ерат�ра dim parent. Е�ли и���ль�ует�� V�S���p� и нужн� и��енить �начение ар�у�ент�в ��д�р��ра��ы, �а� эт� делал��ь � ар�у�ент�� path в CreateFullPath, наверн�е, �ридет�� в����ль��вать�� �лючевы� �л�в�� byval, чт��ы ни�а�ие и��енени� не вли�ли на ��д, вы�вавший ��д�р��ра��у. y y Очень важн�й ���тавл�ющей ре�ур�ии �вл�ет�� ������ ее �ре�ращени�! П�д� �р��ра��а CreateFullPath �р�д�лжает �р�дви�ать�� вверх �� �атал��а� д� тех ��р, ���а р�дитель��а� �а��а не �удет ��наружена �уще�твующей. Она ��жет ��дн�ть�� д� ��рнев��� �атал��а, н� в�е�да в эт�� �е�те ��танавливает��, ��� т��у чт� ��рнева� �а��а �уще�твует в�е�да, е�ли т�ль�� �уще�твует у�а�анный ди��. Е�ли ре�ур�и� дл� ва� �вл�ет�� н�вы� ��н�тие�, �т�ит �а���т��тельн� �р�� ра��тать не���ль�� �ри�ер�в, чт��ы �����треть, �а� ра��тает ��д�р��ра��а. Ра��
Работа с файлами и папками 155 �ерите�ь, чт� �р�и�х�дит, е�ли вы�вать CreateFullPath "C:\files\plans\april" �ри �ледующих ���т��тель�твах: y y C:\�les\plans\april уже �уще�твует д� �а�у��а �ценари�. y y C:\�les\plans �уще�твует д� �а�у��а �ценари�, а ��д�а��а april не �уще�твует. y y C:\�les �уще�твует, а ��д�а��а plans не �уще�твует. y y C:\�les не �уще�твует. В �ажд�� �лучае вы у�едите�ь в т��, чт� ��д�р��ра��а CreateFullPath ра��� тает �равильн�. При эт�� ва� не��х�ди�� �нать � не���ль�их не�н��� �транных ����енн��т�х: на ди��е �а��а �а���� верхне�� ур�вн� (\� �уще�твует в�е�да, и, вы� ража��ь техниче��и� ��ы���, ее р�дитель���й �а���й �вл�ет�� �на �а�а, ��эт��у выражение GetParentFolderName("\") в��вращает "\". (М�жн� в����нить, чт� ��ъ� е�т Shell.Folder ведет �е�� ���дру���у. К��да ��ъе�т Folder �ред�тавл�ет �а��у �а���� верхне�� ур�вн�, е�� �в�й�тв� р�дител� — Parent, в��вращает ��ециальн�е �начение Nothing.� Копирование папки К��ир�вание ��держи���� �а��� — та�же ре�ур�ивный �р�це��, �����ль�у ���и� руе�а� �а��а ��жет ��держать ��д�а��и, ��т�рые та�же д�лжны �ыть ����ир�ва� ны. Мет�д CopyFolder делает эт� авт��атиче��и. Па��у ле��� ��жн� ����ир�вать и� �дн��� �е�та в дру��е: fso.CopyFolder "C:\book\04", "D:\bookbackup\04" Эт�т ��ерат�р ���ирует ��держи��е C:\book\04 в �а��у на ди��е D:, в�е�те � ней ���ируют�� и в�е файлы и ��д�а��и. (При на�и�ании данн�й �ни�и � и�� ��ль��вал ��д��ный �ценарий дл� ��хранени� ре�ервных ���ий �ажд�й �лавы на внешне� ди��е и на �етев�� ����ьютере.� Учтите, чт� �� у��лчанию CopyFolder �удет �ере�а�и�ывать уже �уще�твующие файлы. Е�ли эти файлы нужн� �ащитить �т �ере�а�и�и, �ледует в �аче�тве третье�� ар�у�ента �ет�да CopyFolder у�а�ать False. Объект Scripting.Drive О�ъе�т Drive в��вращает�� ��ъе�т�� FileSystemObject и дает в����жн��ть у�нать, �а� �р�ани��ван ди��, ���ль�� на не� �в���дн��� �р��тран�тва, �а��в� е�� ���т��ние ��д�лючени� (��т�вн��ти�, и ��лучить дру�ую ��ле�ную инф�р� �ацию. П�лучить ��ъе�т Drive ��жн� дву�� ������а�и: y y П�лучить �ред�тавление у�а�анн��� ди��а, и���ль�у� �ет�д GetDrive ��ъе�та FileSystemObject. Ра����три� �ри�ер на V�S���p�: set drv = fso.GetDrive("C:") WScript.Echo "На диске C свободно", drv.FreeSpace, "байт"
156 Глава 4. Доступ к файлам и реестру y y П�лучить ��лле�цию, ���т��щую и� в�ех ди���в, и�еющих�� на ����ьютере, и���ль�у� �в�й�тв� Drives ��ъе�та FileSystemObject. Зате� ��жн� �р���ани� р�вать ��лле�цию, и���ль�у� �ет�д, ��дх�д�щий дл� ваше�� ��ы�а �ценариев. В V�S���p� ��жн� в����ль��вать�� �ледующи� ��д��: for each drv in fso.Drives if drv.IsReady then WScript.Echo "На диске", drv.DriveLetter, "имеется",_ drv.FreeSpace, "свободных байт" else WScript.Echo "Диск", drv.DriveLetter, "не готов" end if next Зате�, е�ли эт� не��х�ди��, ��жн� внутри ци�ла for в����ль��вать�� ��ера� т�ра�и if, чт��ы вы�рать ��н�ретные ди��и или ти�ы ди���в. У ��ъе�та Drive и�еет�� �н�же�тв� �в�й�тв, ��т�рые ���ут ����щить � �в�� ��дн�� и �ан�т�� �р��тран�тве ди��а, е�� ���т��нии ��т�вн��ти и ти�е. Св�й�тва ��ъе�та Drive �еречи�лены в ��рав�е 4.2 . СПРАВКА 4.2. СВОЙСТВА ОБЪЕКТА DRIVE AvailableSpace В��вращает ��личе�тв� д��ту�ных ��ль��вателю �ценари� �айт на ди��е. Е�ли �адей�тв�ван� выделение ди���в��� �р��тран�тва, е�� �начение ��жет �ыть �еньше че� у FreeSpace. Ра��тает �а� дл� �етевых, та� и дл� л��альных ди���в. И�еет �тату� т�ль�� дл� чтени�, �лед�вательн�, е�� �начение ��жн� и���ль��вать, н� �ри�ваивать е�у н�в�е �начение нель��. DriveLetter В��вращает �у�ву ди��а ��ъе�та Drive в ф�р�ате �тр��и (на�ри�ер, "A"�. (Т�ль�� чтение.� DriveType В��вращает �начение, ���а�ывающее ти� у�а�анн��� ди��а. (Т�ль�� чтение.� В����жны �ледующие �начени�. Параметр Значение 0 Неи�ве�тный ти� ди��а 1 С�енный ди�� (�и��ий, Z�p и т. д .� 2 Не�ъе�ный ди�� 3 Сетев�й (�т��раженный� ди�� 4 К���а�т�ди�� или ди�� DVD 5 Виртуальный ди�� FileSystem В��вращает ти� файл�в�й �и�те�ы, и���ль�уе�ый дл� у�а�анн��� ди��а. М�жет вернуть �начени� "FAT", "NTFS" и "CDFS". (Т�ль�� чтение.�
Работа с файлами и папками 157 FreeSpace В��вращает ��личе�тв� �в���дных �айт на ди��е. Е�ли �адей�тв�ван� выделение ди���в��� �р��тран�тва, е�� �начение ��жет �ыть �еньше че� у AvailableSpace. (Т�ль�� чтение.� IsReady В��вращает �улев� �начение True, е�ли у�а�анный ди�� ��д�лючен и ��т�в � ра��те; в �р�тивн�� �лучае в��вращает False. Эт� �в�й�тв� ����щает, в�тавлен ли �и��ий или дру��й ��енный ди��. (Т�ль�� чтение.� Path В��вращает �уть � ди��у (на�ри�ер, "C:"�. (Т�ль�� чтение.� RootFolder В��вращает ��ъе�т Folder, �ред�тавл�ющий ��рневую �а��у на у�а�анн�� ди��е. (Эт� �в�й�тв� и�еет �тату� «Т�ль�� дл� чтени�», х�т�, �а� �удет ���а�ан� в данн�й �лаве, в��вращенный ��ъе�т Folder ��жн� и���ль��вать дл� ра��ты � ��рнев�й �а���й.� SerialNumber В��вращает уни�альный де��тичный �ерийный н��ер, идентифицирую� щий в�е не�ъе�ные и ��енные т��а ди���в � ф�р�ата�и FAT и NTFS. (Т�ль�� чтение.� ShareName В��вращает �етев�е ��щее и�� дл� у�а�анн��� ди��а, е�ли эт�т ди�� �тн�� �ит�� � �т��ражае���у �етев��у ди��у. В��вращает �у�тую �тр��у (""�, е�ли �н не �вл�ет�� �т��ражае�ы� ди����. (Т�ль�� чтение.� TotalSize В��вращает ��щее �р��тран�тв� ди��а в �айтах. (Т�ль�� чтение.� VolumeName В��вращает и�� т��а. Эт� �в�й�тв� и�еет �тату� чтени���а�и�и, �лед�� вательн�, и�� т��а ди��а ��жн� и��енить, �ри�в�ив н�в�е �начение эт��у �в�й�тву. Мет�д�в у ��ъе�та Drive нет. Эт�т ��ъе�т ��жн� и���ль��вать дл� ���ра и �т�� �ражени� инф�р�ации � ди��ах, дл� �р�вер�и д��тат�чн��ти �в���дн��� �р��тран� �тва и дл� �р�вер�и �уще�тв�вани� ди���в и их ��т�вн��ти �еред ���ир�вание� на них файл�в. Подтверждение существования диска При ���ир�вании или ���дании ди���в нужен �ценарий, ������ный у�едить�� в �уще�тв�вании ди��а � у�а�анн�й �у�в�й и в ��т�вн��ти е�� � и���ль��ванию, а та�же у�еющий эле�антн� �авершать ра��ту или �редла�ать в����жн��ть ��х�да �р��ле�ы, е�ли у�а�анный ди�� не �уще�твует или не ��т�в � ра��те.
158 Глава 4. Доступ к файлам и реестру Ра����три� �ценарий, ра�ра��танный дл� ���ир�вани� файл�в и� �дн��� �е�та в дру��е. Сначала �н у�еждает�� в �уще�тв�вании у�а�анн��� ди��а и �ре�ращает вы��лнение �ценари�, е�ли ди�� �т�ут�твует: ' Файл примера script0402.vbs set fso = CreateObject("Scripting.FileSystemObject") inpath = "C:\book\04" outpath = "G:\bookbackup\04" set drv = fso.GetDrive(fso.GetDriveName(outpath)) if not drv.IsReady then msgbox "Сменный диск не готов " WScript.quit 1 end if CreateFullPath outpath fso.CopyFolder inpath, outpath msgbox "Резервное копирование " & inpath & " завершено." ' --------------------------------------------------------------------- sub CreateFullPath (path) dim parent ' временная переменная path = fso.GetAbsolutePathname(path) ' гарантия полного указания пути parent = fso.GetParentFolderName(path) ' получение имени родительской папки if not fso.FolderExists(parent) then ' создание родительской папки ' или па пок, если это необходимо CreateFullPath parent end if if not fso.FolderExists(path) then ' есл и н еобходимо, создание подпапки fso.CreateFolder(path) end if end sub Важн�й ча�тью данн��� �ри�ера �вл�ет�� ��ерат�р drv.IsReady. Мет�д fso. GetDrive в��вращает ��ъе�т Drive, ���твет�твующий ди��у G:, а �в�й�тв� IsReady �р�вер�ет в�лючение �итани� �рив�да, наличие в не� ��енн��� ди��а и ��т�вн��ть � ра��те. Е�ли ди�� не ��т�в, �ценарий выв�дит ����щение в ���вл�юще��� ��не и �авершает ра��ту. Е�ли ди�� ��т�в, �ценарий и���ль�ует ранее ра����тренную ��д�р��ра��у CreateFullPath, чт��ы �арантир�вать �уще�тв�вание вых�дн�й �а��и и �ате� ����ир�вать в нее ��держи��е. Определение диска с наибольшим свободным пространством В уче�н�� �ценарии ���а�ывает�� ������ ��ределени� ди��а � наи��льши� �в�� ��дны� �р��тран�тв�� �реди в�ех ди���в ����ьютера. О�ратите вни�ание на т�, чт� в не� и���ль�ует�� �в�й�тв� IsReady, чт��ы у�едить�� в ��т�вн��ти ди��а �еред ���ыт��й ��ределени� и�еюще���� на не� �в���дн��� �р��тран�тва. В �р�тивн�� �лучае �т�люченный ди�� ��жет вы�вать �ре�ращение вы��лнени� �ценари� � вы� дачей �ши��и:
Работа с файлами и папками 159 ' Файл примера script0403.vbs freedrv = "?" ' содержит букву самого подходящего из ' просмотренных дисков freespace = 0 ' ко лич ест во свободного места на диске freedrv for each drv in fso.Drives if drv.IsReady then if drv.AvailableSpace > freespace then freespace = drv.AvailableSpace ' этот диск более подходящий, freedrv = drv.DriveLetter ' по это му запомним его данные end if end if next ' в ывод результата Wscript.echo "У диска", freedrv, "места больше всех:", freespace, "байт. " В ��нце �ценари� в �ере�енн�й freespace хранит�� ��личе�тв� �р��тран�тва на т�� ди��е, у ��т�р��� �в���дн��� �е�та ��льше, че� у в�ех ��тальных ди���в, а в �ере�енн�й freedrv ��держит и�� эт��� ди��а. Объект Scripting.Folder О�ъе�т Folder в��вращает инф�р�ацию � �в�й�твах и ��держи��� �а���. П� ана� л��ии � ��ъе�т�� Drive, ��ъе�т Folder ��жн� ��лучить дл� ра��ты � у�а�анн�й, и�ве�тн�й �а���й или ��жн� ��лучить ��лле�цию, ���т��щую и� в�ех �а��� на у�а�анн�� ди��е или в у�а�анн�й �а��е. Дл� ��лучени� инф�р�ации �� у�а�анн�й �а��е и���ль�ует�� �ет�д GetFolder. Ра����три� �ри�ер: set fso = CreateObject("Scripting.FileSystemObject") set fldr = fso.GetFolder("C:\temp") Чт��ы �р����треть в�е �а��и, ��держащие�� внутри дру��й �а��и, и���ль�у� ет�� �в�й�тв� SubFolders, в��вращающее ��лле�цию, ��т�ра� ��держит ��и��� в�ех ��д�а���: fldrs = fldr.SubFolders или fldrs = fso.GetFolder("C:\temp").SubFolders Зате� дл� ���лед�вательн��� �ере��ра в�ех и�еющих�� в ��лле�ции �а��� ��жн� в����ль��вать�� ��ерат�р�� for each. ▼) Коллекция, возвращаемая свойством SubFolders, не включает подпапок с именами “.” и “..”, которые показывает команда DIR, запускаемая в командной строке. Эти две «виртуальные» папки представляют соответственно текущую папку и ее родительскую папку, но не являются при этом настоящими подпапками и не перечисляются в коллекции. Дл� ��лучени� ��ъе�та Folder дл� у�а�анн�й �а��и, на�ри�ер дл� �атал��а Desktop или Windows, не �ытайте�ь �а���т��тельн� �тр�ить д��ад�и �тн��ительн� �утев��� и�ени или �ани�ать�� е�� ���тавление�! Ме�т� нах�ждени� ��еци� альных �а��� ��жет и��ен�ть�� �т вер�ии � вер�ии W��dows, а в ��р��ративн�й �ети �н� ��жет �ыть в���ще не�ред��а�уе�ы�. В�е�т� эт��� в����ль�уйте�ь
160 Глава 4. Доступ к файлам и реестру �ет�д�� GetSpecialFolder или �ет�д�� WScript.Shell.SpecialFolders ��ъе�та FileSystemObject, чт��ы ��лучить �утев�е и�� ��ециальн�й �а��и и �ередать эт� и�� �ет�ду GetFolder дл� ��лучени� ��ъе�та. Следующий ��ерат�р ��лучает ��ъ� е�т Folder дл� �а��и хранени� вре�енных файл�в: fldr = fso.GetFolder(fso.GetSpecialFolder(2)) Св�й�тва и �ет�ды ��ъе�та Folder �еречи�лены в ��рав�е 4.3 . СПРАВКА 4.3. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FOLDER СВОЙСТВА Attributes Атри�уты файл�в�й �и�те�ы, �ринадлежащие данн�й �а��е. В чи�л� атри�ут�в �а��и вх�д�т ���d o��y (т�ль�� дл� чтени��, sys��m (�и� �те�на��, h�dd�� (��рыта��, �omp��ss�d (�жата�� и т. д. Каждый в����жный атри�ут �ред�тавлен чи�л�вы� �начение�, а �в�й�тв� Attributes �вл�ет�� �у���й �начений, фа�тиче��и и�еющих�� у �а��и. (Ка� эт� ра��тает, �удет ���а�ан� в �дн�й и� �ледующих уче�ных �р��ра��.� Св�й�тв� Attributes в ��� н�вн�� и�еет �тату� чтени���а�и�и, х�т� не��т�рые атри�уты не ���ут �ыть и��енены �ценарие�. Значени� �в�й�тва Attributes �еречи�лены ниже в та�л. 4 .1 . DateCreated Значение даты�вре�ени, ���а�ывающее дату и вре�� ���дани� �а��и. (Т�ль� �� чтение.� DateLastAccessed Дата и вре�� ���ледне�� ��ращени� � �а��е. (Т�ль�� чтение.� DateLastModified Дата и вре�� ���ледне�� и��енени� �а��и. (Т�ль�� чтение.� Drive Бу�ва ди��а, на ��т�р�� ра��ещена �а��а. (Т�ль�� чтение.� Files К�лле�ци� ��ъе�т�в Scripting.File, �ред�тавл�ющих в�е ��держащие�� в �а��е файлы, в�люча� и те, у ��т�рых у�тан�влены атри�уты ��рытый — hidden и �и�те�ный — system. (Т�ль�� чтение.� IsRootFolder Прини�ает �начение True, е�ли �а��а �вл�ет�� дл� ди��а ��рнев�й, в �р�� тивн�� �лучае �рини�ает �начение False. (Т�ль�� чтение.� Name И�� �а��и. При�ваивание н�в��� �начени� �в�й�тву Name �рив�дит � �ере� и�ен�ванию �а��и. (Дл� чтени� и �а�и�и.� ParentFolder О�ъе�т Folder, �ред�тавл�ющий р�дитель��ую �а��у, в ��т�р�й ��держит�� �а��а, �ред�тавленна� ��ъе�т��. (Т�ль�� чтение.�
Работа с файлами и папками 161 Дл� ��рнев�й �а��и в��вращает�� ��ециальный ��ъе�т �� ��ыл��й на Nothing, ��т�рый �ри и���ль��вании вы�ывает �ши��у. Е�ли �ценарий ��жет �ани�ать�� ��и���� дл� �а��и �а���� верхне�� ур�вн�, нужн� �р�верить наличие эт��� ��ециальн��� �начени�, в����ль��вавши�ь �ри�ерн� та�и� те�т��: ... set parent = fldr.ParentFolder if parent is Nothing then wscript.echo "Эта папка уже является папкой самого верхнего уровня" else wscript.echo "Родительской является папка ", parent.path end if Path А���лютный �уть � �а��е. ShortName И�� �а��и, �а�и� е�� «вид�т» �тарые �р��ра��ы DOS и W��dows 3.1, тре�у� ющие �ридерживать�� ранее �уще�тв�вавше�� ���лашени� �� и���ль��ванию и�ен в ф�р�ате �.3 �и�в�л�в. ShortPath П�лный �уть � �а��е, �а�и� �н виден �тары� �р��ра��а�, тре�ующи� �ридерживать�� �режне�� ���лашени� �� и���ль��ванию и�ен в ф�р�ате �.3 . (Т�ль�� чтение.� Size Ра��ер в �айтах в�ех файл�в и ��д�а���, ��держащих�� в �а��е. (Т�ль�� чтение.� SubFolders К�лле�ци� ��ъе�т�в Folder, �ред�тавл�юща� в�е ��д�а��и, �ринадлежащие данн�й �а��е, в�люча� и те, у ��т�рых у�тан�влены атри�уты hidden и system. Type Дале�� не �а��е ��ле�н�е �в�й�тв�. Дл� �а���, и�еющих в �в�е� и�ени ра�� ширение, Type �вл�ет�� ��и�ательны� и�ене�, �в��анны� � файла�и � та�и� ра�ширение�. На�ри�ер, е�ли �а��а на�вана folder.txt, �начение� Type �удет "Text File" (те��т�вый файл�. (Т�ль�� чтение.� МЕТОДЫ Copy место_назначения[, перезапись] К��ирует �а��у и� �дн��� �е�та в дру��е. CreateTextFile(имя_файла[, перезапись[, юникод]]) Ра��тает в ���твет�твии � ��и�ание� CreateTextFile в ��рав�е 4.1, �а �дни� и��лючение�: е�ли и�� файла не в�лючает �уть или у�а�ан� � и���ль��вание� �тн��ительн��� �ути, файл ���дает�� в �а��е, �ред�тавленн�й ��ъе�т�� Folder, или в �а��е, у�а�анн�й �тн��ительн� нее.
162 Глава 4. Доступ к файлам и реестру Delete [принудительно] Удал�ет �а��у. Е�ли у�а�ан� не����ательн�е �улев� �начение принудительно, ��т�р�е равн� True, �а��а �удет удалена, даже е�ли �на и�еет у�тан�вленный атри�ут «Т�ль�� дл� чтени�». Move место_назначения Пере�ещает файл или �а��у в н�в�е �е�т�. Па��а �тан�вит�� ��д�а���й дл� места_назначения. Значения атрибутов файлов и папок Атри�уты файла и �а��и, на�ри�ер �и�те�ный (�и�те�на�� (system� и т�ль�� дл� чтени� (readOnly�, хран�т�� в виде чи�ел. Каждый в����жный атри�ут и�еет �в�� �анн�е � ни� чи�л�в�е �начение, и чи�л�, ��храненн�е в ��ъе�те File или Folder, �вл�ет�� �у���й �начений у�тан�вленных атри�ут�в. Эти �начени� ���твет�твуют �тдельны� ра�р�да� дв�ичн��� чи�ла и �еречи�лены в та�л. 4 .1 . Таблица 4.1. Значения атрибутов папок и файлов Название атрибута Значение Степень защиты атрибута Описание О�ычный (No�m��� 0 Е�ли не у�тан�влены ни�а�ие атри�уты, �начение равн� нулю, и файл на�ывает�� «��ычны�» Т�ль�� дл� чтени� (R��dO��y� 1 Чтение� �а�и�ь Файл т�ль�� дл� чтени� С�рытый (H�dd��� 2 Чтение� �а�и�ь Файл или �а��а �тн���т�� � ��рыты� Си�те�ный (Sys��m� 4 Чтение� �а�и�ь Файл �ринадлежит ��ераци�нн�й �и�те�е Т�� (Vo�um�� � Т�ль�� чтение Эта �у�ва ди��а �тн��ит�� � т��у фи�иче����� ди��а Катал�� (D�����o�y� 16 Т�ль�� чтение Эт� �а��а (�атал��� Архивный (A��h�v�� 32 Чтение� �а�и�ь Файл и��енил�� �� вре�ени ���ледне�� ре�ервн��� ���ир�вани� П�евд�ни� (A���s� 64 Т�ль�� чтение Эт� ��ыл�а или �рлы� Сжатый (Comp��ss�d� 12� Т�ль�� чтение Файл или �а��а �тн���т�� � �жаты� Файл, у ��т�р��� у�тан�влен т�ль�� �дин ра�р�д R��dO��y (т�ль�� дл� чтени��, и�еет �начение �в�й�тва Attributes, равн�е 1. А файл � у�тан�вленны�и атри�ута�
Работа с файлами и папками 163 �и Скрытый (H�dd��� и Системный (Sys��m� и�еет �начение эт��� �в�й�тва, равн�е 6(2+4�. Проверка значений атрибутов файлов и папок П����ль�у �начение �в�й�тва Attributes ��жет �ыть �у���й не���ль�их �тдель� ных атри�ут�в, е�� ��жн� �равнивать � ��ределенны� чи�л��. На�ри�ер, �р�вер�а if file.Attributes = 1 then ... не ра��тает, е�ли у файла е�ть еще и у�тан�вленный атри�ут Архивный (A��h�v��, �����ль�у т��да �начение �удет равн� 33, а не 1. ▼▼ При использовании атрибутов файлов и папок сценарий будет легче понять, если для значе- ний атрибутов определить вместо чисел поименованные константы. Поместите в самое начало сценария строки кода const ReadOnly = 1 const Hidden = 2 и т. д ., а затем воспользуйтесь при проверке установки атрибутов более описательными име- нами. При использовании констант можно написать следующий код: const ReadOnly = 1 if file.Attributes and ReadOnly then ... Лучше в�е�� решить эту �р��ле�у �уте� поразрядного те�тир�вани� �начений атри�ут�в. С����� вы��лнени� ��ра�р�дн��� те�тир�вани� и�еет�� в �ажд�� ��ы�е �ценариев. Ра����три� �ри�ер на V�S���p�: if file.Attributes and 1 then ... Значение выражени� File.Attributes and 1 равн� 0, е�ли �ервый ра�р�д не у�тан�влен, и равн� 1, е�ли �н у�тан�влен; ��ерат�р if ра���атривает 0 �а� False, а лю��е ненулев�е чи�л� �а� True. П�эт��у е�ли у �начени� Attributes у�тан�влен �ервый ра�р�д, �р�вер�а выда�т ре�ультат True. Проверка установки сразу нескольких атрибутов Е�ли нужн� �р�верить у�тан�в�у �ра�у не���ль�их атри�ут�в, �ледует �р��вить ����ую ����трительн��ть. На�ри�ер, �р�вер�а if file.Attributes and Hidden and Readonly then ... ра��тать не �удет. Фа�тиче��и эта �р�вер�а ни���да не да�т и�тинн��� ре�ультата. У файл�вых атри�ут�в чи�л�вые �начени�, а �ри и���ль��вании чи�ел ��ерат�ры and и or, в��ре�и ваши� в����жны� �ред�тавлени��, не ра��тают. Они вы��л� н�ют � чи�ла�и ��ра�р�дные л��иче��ие ��ерации. Дл� у�в�ени� ��ра�р�дн�й �ате�ати�и нужн� �рил�жить ��ределенные у�или�, н� �де�ь �ы эти� �ани�ать�� не �уде�. Одна�� ��жн� в����ль��вать�� �ледующей �хе��й и ��дифицир�вать �ри�еры в ���твет�твии � ваши�и �а�р��а�и.
164 Глава 4. Доступ к файлам и реестру ШАБЛОН Для выбора файлов, имеющих любой один или несколько установленных атрибутов, восполь- зуйтесь следующим оператором: if File.Attributes and (атрибут or атрибут or атрибут ...) then Например, для вывода списка всех файлов, помеченных либо как скрытые, либо как только для чтения, либо тех, у которых установлены оба этих атрибута, можно воспользоваться следую- щими операторами: const Readonly = 1 const Hidden =2 for each file in fso.GetFolder("c:\windows\system32").Files if file.attributes and (Hidden or Readonly) then WScript.echo file.name end if next А для выбора файлов, у которых установлены все нужные вам атрибуты, воспользуйтесь сле- дующим оператором: if (File.Attributes and (атрибут or атрибут or атрибут ...)) = _ (атрибут or атрибут or атрибут ...) then Например, следующие операторы выводят список всех файлов, помеченных как скрытые и только для чтения: for each file in fso.GetFolder("c:\windows\system32").Files if (file.attributes and (Hidden or Readonly)) = (Hidden or Readonly) then WScript.echo file.name end if next Изменение значений атрибутов файлов и папок Значени� не��т�рых атри�ут�в файл�в или �а��� ��жн� и��ен�ть �уте� �ри� �ваивани� �в�й�тву Attributes н�в��� �начени�. Н� �ценарий ��жет и��енить �начени� т�ль�� тех атри�ут�в, дл� ��т�рых в �т�л�це «Сте�ень �ащиты атри�ута» та�л. 4 .1 у�а�ан� «Чтение��а�и�ь» . Нель��, на�ри�ер, у�тан�вить атри�ут Каталог (D�����o�y�, та� �а� эт� �ыл� �ы �р�дни ���ыт�е �ревратить файл в �а��у. Дл� у�тан�в�и или �н�ти� �тдельных атри�ут�в нужн� и���ль��вать ��ра�� р�дную �ате�ати�у, в ��т�р�й дл� �л�жени� �начений ра�р�д�в и���ль�ует�� ��ерат�р or. Дл� у�тан�в�и ра�р�да и���ль�ует�� ��ерат�р or: file.Attributes = file.Attributes or (устанавливаемый разряд или разряды) Ра����три� �ри�ер, у�танавливающий дл� файла атри�уты Т�ль�� дл� чтени� (R��dO��y� и С�рытый (H�dd���: file.Attributes = file.Attributes or (ReadOnly or Hidden) Преи�уще�тва эт��� выражени� �еред �ледующи� выражение� �