Сервер сценариев Windows CScript
Сервер сценариев Windows поддерживает сценарии, написанные в редакторах VBScript и Jscript.Использование:
CScript имя_сценария. [параметры_сервера...] [аргументы...]имя_сценария — имя файла сценария, включая путь и расширение.
параметры_сервера — ключи командной строки, задающие различные свойства сервера сценариев Windows.
Параметр сервера всегда начинается с двух косых черт (//).
Параметр | Описание |
---|---|
//B | Пакетный режим: подавляются отображение ошибок и запросов сценария |
//D | Включение режима Active Debugging |
//E:ядро | Использование указанного ядра для выполнения сценария |
//H:CScript | Стандартный сервер сценариев заменяется на CScript.exe |
//H:WScript | Стандартный сервер сценариев заменяется на WScript.exe (по умолчанию) |
//I | Диалоговый режим (по умолчанию, в противоположность //B) |
//Job:xxxx | Выполнение указанного задания WSF |
//Logo | Отображать сведения о программе (по умолчанию) |
//Nologo | Не отображать сведения о программе во время выполнения |
//S | Сохранить для данного пользователя текущие параметры командной строки |
//T:nnnnn | Интервал ожидания (в секундах): максимальное время выполнения сценария |
//X | Выполнение сценария в отладчике |
//U | Использование кодировки Юникод при перенаправлении ввода-вывода с консоли |
//? | Вывод предусмотреных параметров командной строки и встроенной справки |
Примечания
- Все параметры являются необязательными, однако нельзя задать аргументы сценария, не задав сценарий. При отсутствии сценария программа Cscript.exe выведет описание синтаксиса команды и предусмотренные ключи ( аналогично параметру //?).
- Параметр времени ожидания (//T:nnnnn) ограничивает максимальное время выполнения сценария. Можно указать значение времени до 32 767 секунд. По умолчанию время выполнения не ограничено. Если время выполнения превышает заданную величину, Cscript.exe прерывает работу обработчика и останавливает процесс.
- Расширения файлов (.vbs для VBScript и .js для JScript) используются в обработчике сценариев для определения языка сценария.
-
Параметр //Logo, используемый по умолчанию, сделает вас счастливым свидетелем
отображения на экране надписи что-то вроде этой:
Сервер сценариев Windows (Microsoft R) версия 5.7
Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.
Если вы хотите лишить себя такого счастья - можете использовать параметр //Nologo.
Рассмотрим сразу случай, когда данные передаются скрипту и результат обработки получают обратно в bat / cmd файле. Возможно вы будете удивлены легкости решения этой задачи.
set qq=1q2w3e4r
cscript //nologo strlen.js %qq%
for /F "usebackq" %%i in (`cscript //nologo strlen.js "%qq%"`) do set /A myvar=%%i
echo length str %myvar%
Переменная qq содержит ваш пароль? Да, я подсматривал...
А вот и содержимое файла strlen.js:
//JScript
var Args = WScript.Arguments;
WScript.Echo(Args(0).length);
Приведенный выше скрипт возвращает длину строковой переменной, переданную ему как параметр.
То, что в скрипт могут быть переданы аргументы, мы уже рассматривали в синтаксисе cscript (см. выше).
Для получения данных из скрипта используется прием, рассмотренный в разделе ПРИМЕРЫ этого проекта на странице Анализ результатов работы команды, программы.
Код JavaScript (точнее, JScript) содержит извлечение аргумента, обращение к функции и вывод значения.
Небольшое отступление.
Когда я писал скрипт, то при вызове strlen.js не заключил аргумент в кавычки. При работе в большинстве случаев результат был правильным, но иногда и нет. Это сейчас все кажется понятным. А тогда поиск ошибки занял немало времени. Да и в таком варианте если строка сама содержит кавычки, то результат ее вам может не понравиться
Аналогичным образом можно обращаться и к другим функциям языка, значительно расширив таким образом возможности bat / cmd программ. Например, использовать для обработки регулярные выражения.
function trimStr (s) {
s = s.replace(/^\s+/, '');
for (var i = s.length - 1; i >= 0; i--) {
if (/\S/.test(s.charAt(i))) {
s = s.substring(0, i + 1);
break;
}
}
return s;
}
var Args = WScript.Arguments;
WScript.Echo(trimStr(Args(0)));
В данном случае использовалась процедура удаления ведущих и замыкающих пробелов у строковой переменной.
(В разделе ПРИМЕРЫ этого проекта на странице Примеры работы со строками в bat/cmd файлах приведена моя функция для этих же целей, как мне кажется, более эффективная. Здесь же использовалась функция специально использующая регулярные выражения)
Кроме того, это можно рассматривать и как пример использования собственных функций на JScript.
Пример обращения к такой функции:
set "qq= Контуженный информационным взрывом "
for /F "usebackq delims=" %%i in (`cscript //nologo trimstr.js "%qq%"`) do set myvar=%%i
echo trim str %myvar%
И еще один пример.
set qq=d:
for /F "usebackq tokens=1,2,3" %%i in (`cscript //nologo spacedrv.js %qq%`) do (
echo drive: %qq%
echo TotalSize: %%i
echo FreeSpace: %%j
echo FileSystem: %%k
)
И сам скрипт spacedrv.js:
var Args = WScript.Arguments;
if (Args.length == 0) drv="c:"; else drv=Args(0);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fdrv = fso.GetDrive(drv);
WScript.Echo(fdrv.TotalSize+ " "+fdrv.FreeSpace+" "+fdrv.FileSystem);
В результате выполнения этого скрипта вы узнаете общий объем диска, свободное пространство на нем и тип файловой системы.
Здесь использовалась объектная модель сервера, речь о которой будет ниже.
Интерес в этом примере может представлять то, что JScript возвращает в bat / cmd файл сразу 3 значения.
Одно только такое использование значительно расширяют возможности bat / cmd файлов.
В вашем арсенале теперь есть возможности более мощного языка.
Стали доступны не только встроенные функции на JS или VBS, но и множество библиотек и функций на этих языках, которые без особого труда можно найти в сети.
Но при использовании cscript дополнительно доступны несколько классов со своими свойствами и методами.
Они раскрывают новые возможности. Или, говоря пафосно, новые горизонты.
Это довольно большой объем информации, и здесь будет сделана попытка кратко его изложить на отдельных страницах в рамках этого проекта. Хотя возможно, это будет и отдельный проект.
Очень кратко, обзорно, объектная модель сервера сценариев Windows представлена здесь. Следует отметить, что на этой странице рассматриваются далеко не все объекты, доступные для использования в cscript.
Работе с аргументами посвящена специальная страница.
Для работы с коллекциями часто используется Объект Enumerator
Отдельно объект FileSystemObject рассмотрен здесь. Несмотря на то, что что этот объект рассмотрен не очень подробно, исходный код страницы превысил две с половиной тысячи строк.
Объект WshNetwork - работа с сетевым окружением - краткое описание с примерами здесь.
WSH скрипты. Полезное - здесь.
Как объединить BAT/CMD и JSCRIPT в один файл описано здесь.
Отдельная страница посвящена различным примерам использования скриптов.
По мере возможности, желания и расположения Светил эти страницы будут пополняться и создаваться новые.
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).
Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь