Замечание

В дочернем консольном приложении вывод строк в выходной поток происходит в 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

  Exit Do  ' Выходим из цикла

 End If

 ' Проверяем, не завершилось ли выполнение DIR

Перейти на страницу:

Похожие книги