`
Читать книги » Книги » Компьютеры и Интернет » Программное обеспечение » Андрей Попов - Windows Script Host для Windows 2000/XP

Андрей Попов - Windows Script Host для Windows 2000/XP

1 ... 36 37 38 39 40 ... 175 ВПЕРЕД
Перейти на страницу:

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

/* РРјСЏ: 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)

  //Считываем полностью выходной поток команды DIR

В В s+=ObjExec.StdOut.ReadAll();

 if (IsBreak) break; //Выходим из цикла

 if (ObjExec.Status==1) //Проверяем, не завершилось ли выполнение DIR

В  IsBreak=true;

 else WScript.Sleep(100); //Приостанавливаем сценарий на 0,1 сек

}

Рис. 2.14. Результат выполнения команды DIR /B

Родительский и дочерний процессы работают асинхронно, поэтому пока команда DIR не перестанет выдавать данные, т.е. пока свойство Status объекта ObjExec не станет равным 1, выполнение сценария с помощью метода WScript.Sleep периодически приостанавливается на 0,1 секунды.

После того как считаны все данные из выходного потока команды DIR (свойство ObjExec.StdOut.AtEndOfStream равно true), происходит выход из цикла и формирование из переменной s массива выведенных строк:

ArrS=s.split("n");

После этого только остается подсчитать количество файлов в каталоге, которое на единицу меньше количества строк в массиве ArrS:

ColFiles=ArrS.length-1;

и вывести нужные строки на экран:

WScript.StdOut.WriteLine("Всего файлов в текущем каталоге: "+ColFiles);

for (i=0;i<=ColFiles-1; i++ )

 WScript.StdOut.WriteLine(ArrS[i]); //Выводим строки на экран

Замечание

В дочернем консольном приложении вывод строк в выходной поток происходит в DOS-кодировке, поэтому при наличии символов кириллицы эти строки нужно преобразовывать в кодировку Windows (примеры соответствующих функций конвертации на языках JScript и VBScript приведены в листингах 2.14 и 2.15).

Листинг 2.36. Запуск дочернего консольного приложения (JScript)

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

/* РРјСЏ: ExecConApp.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В  */

/* Язык: JScript                                                   */

/* Описание: Запуск дочернего консольного приложения               */

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

//Объявляем переменные

var ObjExec,WshShell,s,IsBreak,ArrS,ColStr,ColFiles,i;

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

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

1 ... 36 37 38 39 40 ... 175 ВПЕРЕД
Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Андрей Попов - Windows Script Host для Windows 2000/XP, относящееся к жанру Программное обеспечение. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)