Вход/Регистрация
Windows Script Host для Windows 2000/XP
вернуться

Попов Андрей Викторович

Шрифт:

В листингах 2.34 и 2.35 приведены сценарии на языках JScript и VBScript, в которых запускаются внутренние команды

COPY /?
(вызов встроенной справки для сору) и
DIR %WINDIR%
(вывод содержимого системного каталога Windows).

При этом окно, в котором выполняется команда

COPY /?
, не закрывается после завершения этой команды, т.к. при запуске командного интерпретатора был указан ключ /k, а информация, выводимая командой DIR %WINDIR%, перенаправляется в файл windir.txt, после чего командное окно закрывается, т.к. для командного интерпретатора в этом случае был указан ключ
/с
.

Листинг 2.34. Доступ к параметрам командной строки запущенного сценария (JScript)

/*******************************************************************/

/* Имя: RunDOSCom.js */

/* Язык: JScript */

/* Описание: Выполнение внутренних команд DOS */

/*******************************************************************/

var WshShell, Code; //Объявляем переменные

//Создаем объект WshShell

WshShell = WScript.CreateObject("WScript.Shell");

//Запускаем внутреннюю команду COPY

WshShell.Run("%COMSPEC% /k copy /?",1);

//Запускаем внутреннюю команду DIR

WshShell.Run("%COMSPEC% /c dir %WINDIR% > windir.txt",1);

/************* Конец *********************************************/

Листинг 2.35. Доступ к параметрам командной строки запущенного сценария (VBScript)

'*******************************************************************

' Имя: RunDOSCom.vbs

' Язык: VBScript

' Описание: Выполнение внутренних команд DOS

'*******************************************************************

Option Explicit

Dim WshShell, Code ' Объявляем переменные

' Создаем объект WshShell

Set WshShell = WScript.CreateObject("WScript.Shell")

' Запускаем внутреннюю команду COPY

WshShell.Run "%COMSPEC% /k copy /?",1

' Запускаем внутреннюю команду DIR

WshShell.Run "%COMSPEC% /c dir %WINDIR% > windir.txt",1

'************* Конец *********************************************/

Запуск дочерних консольных приложений и команд DOS, использование их входных и выходных потоков

Консольное приложение или команду DOS можно запустить из сценария как дочернюю задачу, т.е. с теми же переменными среды, что у процесса-родителя. При этом информация, выводимая дочерним процессом, на экран дублироваться не будет, однако из родительского сценария можно считывать информацию из выходного потока и посылать данные во входной поток дочерней задачи (это напоминает конвейеризацию команд DOS, при которой данные выходного потока одной команды поступают во входной поток другой команды, например

DIR | MORE
). Таким образом, из сценария можно запускать ту или иную утилиту командной строки и обрабатывать выводимые ей данные; иногда таким образом получить нужную информацию бывает проще и быстрее, чем при использовании объектной модели WSH или другого сервера автоматизации.

В качестве примера рассмотрим сценарий ExecConApp.js (листинг 2.36), который выводит на экран общее количество файлов в текущем каталоге и их имена (рис. 2.13).

Рис. 2.13. Результат выполнения сценария ExecConApp.js

Как нетрудно заметить, имена файлов выводятся на экран в том же виде, что и при использовании команды

DIR /B
(рис. 2.14).

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

DIR
с ключом
/B
:

ObjExec=WshShell.Exec("%COMSPEC% /с dir /b");

и полностью считать данные, появляющиеся в выходном потоке этого процесса. Для этого в цикле вызывается метод ReadAll, считывающий всю информацию, имеющуюся к тому времени в потоке StdOut объекта ObjExec в переменную s:

IsBreak=false;

for (;;) { //Бесконечный цикл

 //Проверяем, достигнут ли конец выходного потока команды DIR

 if (!ObjExec.StdOut.AtEndOfStream)

  • Читать дальше
  • 1
  • ...
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: