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
Поделиться:
Популярные книги
Травница Его Драконейшества
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Темный Лекарь
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Наследник
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Мастер 2
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
40000 лет назад
1. Мир о котором никто не помнит
Фантастика:
фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Газлайтер. Том 22
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 2
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 29
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Моя простая курортная жизнь 3
3. Моя простая курортная жизнь
Юмор:
юмористическая проза
5.00
рейтинг книги
Эволюционер из трущоб. Том 8
8. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Спасите меня, Кацураги-сан! Том 12
12. Токийский лекарь
Фантастика:
попаданцы
дорама
фэнтези
5.00
рейтинг книги
Феномен
2. Уникум
Фантастика:
боевая фантастика
6.50
рейтинг книги
Неправильный лекарь. Том 4
4. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00