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

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

Жанры

Windows Script Host для Windows 2000/XP

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

Шрифт:

Option Explicit

Dim WshShell, Code ' Объявляем переменные

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

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

' Запускаем утилиту xcopy с ключом "/?" и ожидаем окончания ее работы

Code=WshShell.Run("xcopy /?",1,true)

' Печатаем полученный код возврата

WScript.Echo "Код возврата: ", Code

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

Для выполнения внутренней команды DOS нужно запустить командный интерпретатор (в Windows NT/2000/XP это файл cmd.exe, в Windows9х — command.com) и передать ему в качестве параметра нужную команду. Для того чтобы при вызове командного интерпретатора не заботиться о полном пути к cmd.exe, нужно использовать переменную среды

COMSPEC
.

Замечание

Для получения значения переменной среды ее имя нужно окружить знаками "%" (например,

%COMSPEC%
).

В листингах 2.34 и 2.35 приведены сценарии на языках JScript и VBScript, в которых запускаются внутренние команды

COPY /?
(вызов встроенной справки для сору) и
DIR %WINDIR%
(вывод содержимого системного каталога Windows).

При этом окно, в котором выполняется команда

COPY /?
, не закрывается после завершения этой команды, т.к. при запуске командного интерпретатора был указан ключ /k, а информация, выводимая командой DIR %WINDIR%, перенаправляется в файл windir.txt, после чего командное окно закрывается, т.к. для командного интерпретатора в этом случае был указан ключ
.

Листинг 2.34. Доступ к параметрам командной строки запущенного сценария (JScript)

/*******************************************************************/

/* Имя: RunDOSCom.js */

/* Язык: JScript */

/* Описание: Выполнение внутренних команд DOS */

/*******************************************************************/

var WshShell, Code; //Объявляем переменные

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

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

//Запускаем внутреннюю команду COPY

WshShell.Run("%COMSPEC% /k copy /?",1);

//Запускаем внутреннюю команду DIR

WshShell.Run("%COMSPEC% /c dir %WINDIR% > windir.txt",1);

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

Листинг 2.35. Доступ к параметрам командной строки запущенного сценария (VBScript)

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

' Имя: RunDOSCom.vbs

' Язык: VBScript

'
Описание: Выполнение внутренних команд DOS

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

Option Explicit

Dim WshShell, Code ' Объявляем переменные

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

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

' Запускаем внутреннюю команду COPY

WshShell.Run "%COMSPEC% /k copy /?",1

' Запускаем внутреннюю команду DIR

WshShell.Run "%COMSPEC% /c dir %WINDIR% > windir.txt",1

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

Запуск дочерних консольных приложений и команд DOS, использование их входных и выходных потоков

Консольное приложение или команду DOS можно запустить из сценария как дочернюю задачу, т.е. с теми же переменными среды, что у процесса-родителя. При этом информация, выводимая дочерним процессом, на экран дублироваться не будет, однако из родительского сценария можно считывать информацию из выходного потока и посылать данные во входной поток дочерней задачи (это напоминает конвейеризацию команд DOS, при которой данные выходного потока одной команды поступают во входной поток другой команды, например

DIR | MORE
). Таким образом, из сценария можно запускать ту или иную утилиту командной строки и обрабатывать выводимые ей данные; иногда таким образом получить нужную информацию бывает проще и быстрее, чем при использовании объектной модели WSH или другого сервера автоматизации.

В качестве примера рассмотрим сценарий ExecConApp.js (листинг 2.36), который выводит на экран общее количество файлов в текущем каталоге и их имена (рис. 2.13).

Рис. 2.13. Результат выполнения сценария ExecConApp.js

Как нетрудно заметить, имена файлов выводятся на экран в том же виде, что и при использовании команды

DIR /B
(рис. 2.14).

Таким образом, для получения нужной информации необходимо запустить в качестве дочернего процесса команду

DIR
с ключом
/B
:

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

и полностью считать данные, появляющиеся в выходном потоке этого процесса. Для этого в цикле вызывается метод ReadAll, считывающий всю информацию, имеющуюся к тому времени в потоке StdOut объекта ObjExec в переменную s:

IsBreak=false;

for (;;) { //Бесконечный цикл

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

 if (!ObjExec.StdOut.AtEndOfStream)

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

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Отряд

Валериев Игорь
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Отряд

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Адепт

Листратов Валерий
4. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Адепт

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

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

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

Газлайтер. Том 20

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

Моров. Том 3

Кощеев Владимир
2. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Моров. Том 3

Сочинитель

Константинов Андрей Дмитриевич
5. Бандитский Петербург
Детективы:
боевики
7.75
рейтинг книги
Сочинитель

Ученик

Листратов Валерий
2. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ученик

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая