Чтение онлайн

на главную - закладки

Жанры

Windows Script Host для Windows 2000/XP

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

Шрифт:

//Считываем полностью выходной поток команды 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");

//Запускаем команду DIR

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

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 сек

}

ArrS=s.split("\n"); //Формируем массив строк

ColFiles=ArrS.length-1; // Количество файлов в текущем каталоге

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

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

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

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

Аналогичный сценарий на языке VBScript приведен в листинге 2.37.

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

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

' Имя: ExecConApp.vbs

' Язык: VbScript

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

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

Option Explicit

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

Dim ObjExec,WshShell,s,IsBreak,ArrS,ColStr,ColFiles,i

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

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

' Запускаем команду DIR

Set ObjExec=WshShell.Exec("%COMSPEC% /c dir /b")

s=""

IsBreak=False

Do While True ' Бесконечный цикл

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

 If (Not ObjExec.StdOut.AtEndOfStream) Then

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

s=s+ObjExec.StdOut.ReadAll

 End If

 If IsBreak Then

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

Миллионщик

Шимохин Дмитрий
3. Подкидыш
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Миллионщик

Орден Багровой бури. Книга 1

Ермоленков Алексей
1. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 1

Лекарь Империи 8

Лиманский Александр
8. Лекарь Империи
Фантастика:
попаданцы
городское фэнтези
аниме
5.00
рейтинг книги
Лекарь Империи 8

Огненный князь 3

Машуков Тимур
3. Багряный восход
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Огненный князь 3

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Эволюционер из трущоб. Том 11

Панарин Антон
11. Эволюционер из трущоб
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 11

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Компас желаний

Кас Маркус
8. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Компас желаний

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Искатель 7

Шиленко Сергей
7. Валинор
Фантастика:
рпг
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Искатель 7

Сирийский рубеж

Дорин Михаил
5. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж

Император Пограничья 10

Астахов Евгений Евгеньевич
10. Император Пограничья
Фантастика:
городское фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 10

Тьма и Хаос

Владимиров Денис
6. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тьма и Хаос

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3