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

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

Жанры

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

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

Целого Мира Мало

Джиллиан Алекс
Любовные романы:
современные любовные романы
8.88
рейтинг книги
Целого Мира Мало

Товарищ "Чума" 10

lanpirot
10. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 10

Наследник для дона мафии

Тоцка Тала
2. Наследники мафии
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Наследник для дона мафии

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Первый среди равных. Книга II

Бор Жорж
2. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга II

Товарищ "Чума" 4

lanpirot
4. Товарищ "Чума"
Фантастика:
городское фэнтези
альтернативная история
5.00
рейтинг книги
Товарищ Чума 4

Темный Лекарь 9

Токсик Саша
9. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 9

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти

Мудрова Ирина Анатольевна
Старинная литература:
мифы. легенды. эпос
5.00
рейтинг книги
Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Травница Его Драконейшества

Рель Кейлет
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травница Его Драконейшества

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Печать Пожирателя

Соломенный Илья
4. Пожиратель
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Печать Пожирателя