Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
function DosToWin(s) {
 var i,ss; //Объявляем переменные
 //Проверяем, создан ли объект RusDict
В if (typeof(RusDict)=="undefined")
 //Если объект RusDict не создан, создаем его
В MakeRusDict();
В ss="";
 for (i=0;i<s.length;i++) { //Цикл по всем символам в строке
 if (RusDict.Exists(s.charAt(i))) //Проверяем наличие символа в словаре
  //Преобразуем i-й символ в Windows-кодировку
В В ss+=RusDict.Item(s.charAt(i));
В else ss+=s.charAt(i);
В }
В return ss;
}
Основным РІ функции DosToWin является использование объекта Dictionary СЃ именем RusDict. Ртот объект формируется РІ функции MakeRusDict Рё содержит пары "ключ"–"Р·РЅaС‡eРЅРёe" для всех Р±СѓРєРІ СЂСѓСЃСЃРєРѕРіРѕ алфавита, причем РІ качестве ключа указывается Р±СѓРєРІР° РІ DOS-РєРѕРґРёСЂРѕРІРєРµ, Р° РІ качестве значения — СЃРёРјРІРѕР» СЃ РєРѕРґРѕРј, который соответствует этой Р±СѓРєРІРµ РІ Windows-РєРѕРґРёСЂРѕРІРєРµ.
//Функция для создания объекта Dictionary с парами "ключ-значение", где
//"ключ"-буква в DOS-кодировке, "значение"- символ, соответствующий этой
//Р±СѓРєРІРµ РІ Windows-РєРѕРґРёСЂРѕРІРєРµ
function MakeRusDict() {
 //Создаем объект Dictionary
В RusDict = WScript.CreateObject("Scripting.Dictionary");
 //Заполняем пары "ключ" (символ в DOS-кодировке)- "значение" (символ в
 //Window-кодировке) для всех букв русского алфавита
 RusDict.add("Ђ", "А"); RusDict.add("Ѓ", "Б"); RusDict.add("‚", "В");
 RusDict.add("ѓ", "Г"); RusDict.add("„", "Д"); RusDict.add("…", "Е");
 RusDict.add("р", "Ё"); RusDict.add("†", "Ж"); RusDict.add("‡", "З");
В RusDict.add("€", "Р"); RusDict.add("‰", "Р™"); RusDict.add("Р‰", "Рљ");
 RusDict.add("‹", "Л"); RusDict.add("Њ", "М"); RusDict.add("Ќ", "Н");
В RusDict.add("Р‹", "Рћ"); RusDict.add("РЏ", "Рџ"); RusDict.add("С’", "Р ");
В RusDict.add("вЂ", "РЎ"); RusDict.add("’", "Рў"); RusDict.add("“", "РЈ");
 RusDict.add("”", "Ф"); RusDict.add("•", "Х"); RusDict.add("–", "Ц");
В RusDict.add("—", "Р§"); RusDict.add("В", "РЁ"); RusDict.add("в„ў", "Р©");
 RusDict.add("љ", "Ъ"); RusDict.add("›", "Ы"); RusDict.add("њ", "Ь");
В RusDict.add("Сњ", "Р"); RusDict.add("С›", "Р®"); RusDict.add("Сџ", "РЇ");
В RusDict.add("В ", "Р°"); RusDict.add("РЋ", "Р±"); RusDict.add("Сћ", "РІ");
В RusDict.add("Р€", "Рі"); RusDict.add("В¤", "Рґ"); RusDict.add("Тђ", "Рµ");
В RusDict.add("СЃ", "С‘"); RusDict.add("В¦", "Р¶"); RusDict.add("В§", "Р·");
В RusDict.add("РЃ", "Рё"); RusDict.add("В©", "Р№"); RusDict.add("Р„", "Рє");
В RusDict.add("В«", "Р»"); RusDict.add("В¬", "Рј"); RusDict.add("В", "РЅ");
В RusDict.add("В®", "Рѕ"); RusDict.add("Р‡", "Рї"); RusDict.add("Р°", "СЂ");
В RusDict.add("Р±", "СЃ"); RusDict.add("РІ", "С‚"); RusDict.add("Рі", "Сѓ");
В RusDict.add("Рґ", "С„"); RusDict.add("Рµ", "С…"); RusDict.add("Р¶", "С†");
В RusDict.add("Р·", "С‡"); RusDict.add("Рё", "С€"); RusDict.add("Р№", "С‰");
В RusDict.add("Рє", "СЉ"); RusDict.add("Р»", "С‹"); RusDict.add("Рј", "СЊ");
В RusDict.add("РЅ", "СЌ"); RusDict.add("Рѕ", "СЋ"); RusDict.add("Рї", "СЏ");
}
Листинг 1.27. Доступ к потоку StdOut дочернего процесса/*****************************************************************/
/* РРјСЏ: ConToWin.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                */
/* РљРѕРґРёСЂРѕРІРєР°: DOSВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Описание: Доступ к потоку StdOut дочернего процесса          */
/*****************************************************************/
var WshShell,theJob,s,IsBreak,RusDict; //Объявляем переменные
//Функция для создания объекта Dictionary с парами "ключ-значение", где
//"ключ"-буква в DOS-кодировке, "значение"- символ, соответствующий этой
//Р±СѓРєРІРµ РІ Windows-РєРѕРґРёСЂРѕРІРєРµ
function MakeRusDict() {
 //Создаем объект Dictionary
В RusDict = WScript.CreateObject("Scripting.Dictionary");
 //Заполняем пары "ключ" (символ в DOS-кодировке)- "значение" (символ в
 //Window-кодировке) для всех букв русского алфавита
 RusDict.add("Ђ", "А"); RusDict.add("Ѓ", "Б"); RusDict.add("‚", "В");
 RusDict.add("ѓ", "Г"); RusDict.add("„", "Д"); RusDict.add("…", "Е");
 RusDict.add("р", "Ё"); RusDict.add("†", "Ж"); RusDict.add("‡", "З");
В RusDict.add("€", "Р"); RusDict.add("‰", "Р™"); RusDict.add("Р‰", "Рљ");
 RusDict.add("‹", "Л"); RusDict.add("Њ", "М"); RusDict.add("Ќ", "Н");
В RusDict.add("Р‹", "Рћ"); RusDict.add("РЏ", "Рџ"); RusDict.add("С’", "Р ");
В RusDict.add("вЂ", "РЎ"); RusDict.add("’", "Рў"); RusDict.add("“", "РЈ");
 RusDict.add("”", "Ф"); RusDict.add("•", "Х"); RusDict.add("–", "Ц");
В RusDict.add("—", "Р§"); RusDict.add("В", "РЁ"); RusDict.add("в„ў", "Р©");
 RusDict.add("љ", "Ъ"); RusDict.add("›", "Ы"); RusDict.add("њ", "Ь");
В RusDict.add("Сњ", "Р"); RusDict.add("С›", "Р®"); RusDict.add("Сџ", "РЇ");
В RusDict.add("В ", "Р°"); RusDict.add("РЋ", "Р±"); RusDict.add("Сћ", "РІ");
В RusDict.add("Р€", "Рі"); RusDict.add("В¤", "Рґ"); RusDict.add("Тђ", "Рµ");
В RusDict.add("СЃ", "С‘"); RusDict.add("В¦", "Р¶"); RusDict.add("В§", "Р·");
В RusDict.add("РЃ", "Рё"); RusDict.add("В©", "Р№"); RusDict.add("Р„", "Рє");
В RusDict.add("В«", "Р»"); RusDict.add("В¬", "Рј"); RusDict.add("В", "РЅ");
В RusDict.add("В®", "Рѕ"); RusDict.add("Р‡", "Рї"); RusDict.add("Р°", "СЂ");
В RusDict.add("Р±", "СЃ"); RusDict.add("РІ", "С‚"); RusDict.add("Рі", "Сѓ");
В RusDict.add("Рґ", "С„"); RusDict.add("Рµ", "С…"); RusDict.add("Р¶", "С†");
В RusDict.add("Р·", "С‡"); RusDict.add("Рё", "С€"); RusDict.add("Р№", "С‰");
В RusDict.add("Рє", "СЉ"); RusDict.add("Р»", "С‹"); RusDict.add("Рј", "СЊ");
В RusDict.add("РЅ", "СЌ"); RusDict.add("Рѕ", "СЋ"); RusDict.add("Рї", "СЏ");
}
//Функция для перевода строки из DOS- в Windows-кодировку
function DosToWin(s) {
 var i,ss; //Объявляем переменные
 //Проверяем, создан ли объект RusDict
В if (typeof(RusDict)=="undefined")
 //Если объект RusDict не создан, создаем его
В MakeRusDict();
В ss="";
 for (i=0;i<s.length;i++) { //Цикл по всем символам в строке
 if (RusDict.Exists(s.charAt(i))) //Проверяем наличие символа в словаре
  //Преобразуем i-й символ в Windows-кодировку
В В ss+=RusDict.Item(s.charAt(i));
В else ss+=s.charAt(i);
В }
В return ss;
}
/************* Начало *********************************************/
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
//Запускаем дочернее приложение
theJob = WshShell.Exec("cscript");
IsBreak=false;
for (;;) {
В if (!theJob.StdOut.AtEndOfStream)
 //Считываем всю информацию, находящуюся в потоке StdOut
 //дочернего процесса
В s+=theJob.StdOut.ReadAll();
В if (IsBreak) break;
 if (theJob.status==1) //Проверяем, не завершилась ли запущенная задача
В IsBreak=true;
В else WScript.Sleep(100);
}
//Преобразуем сформированные строки в Windows-кодировку
//и выводим их на экран
WScript.Echo(DosToWin(s));
/************* Конец *********************************************/
Таким образом, можно с помощью метода Exec запустить утилиту командной строки, передавать ей нужную входную информацию с помощью свойства StdIn и с помощью свойства StdOut получать и анализировать выдаваемые этой утилитой строки (соответствующие примеры приведены также в листингах 2.37 и 2.38).