UMX knowledge base
В этой статье описано как создавать собственные макросы JScript используя скриптовые возможности UMX.

 


Для того, чтобы добавить новый макрос в UMX, вы должны поместить специальный файл описания скрипта в папку /Scripts, расположенную там, где установлен UMX.
Файл должен иметь расширение *.s и именть следующую структуру:

@SCRIPT <scriptname>
@LANG <langid>
<script definition>

В одном файле может быть несколько определений, следующих друг за другом. Признак начала определения - строка @SCRIPT <scriptname>

<scriptname> - это уникальное имя макроса, в The Bat он будет доступен с приставкой "FN", например, скрипт под названием TEST можно будет вызывать из шаблона при помощи макроса %FNTEST.

<langid> - это идентификатор языка: JS - Jscript, VB - VBscript, PAS - pascal.

<script definition> - это сам текст скрипта в соответствии с синтаксисом выбранного в секции @LANG языка.

Например, чтобы создать макрос %FNTESST, который вернёт "Hello, World", выполните следующее:

Поместите файл TESST.S в папку /Scripts и перезапустите The Bat!

@SCRIPT TESST
@LANG JS
hello();
function hello(){
return 'Hello, World';
};

А такой скрипт:

@SCRIPT TESST
@LANG JS
'Hello, World'

Вернёт тот же самый результат.

Чтобы иметь возможность использовать в скрипте аргументы, передаваемые макросу в скобках (например, %FNTESST("Hello","123455")), вы должны выхвать специальную функцию GetParams(), инициализирующую и заполняющую значениями два служебные переменные - ParamCount и ParamStr.

ParamCount содержит число переданных скрипту аргументов. Например, для %FNTESST(1,"2","test") ParamCount будет равняться 3, а для %FNTESST - 0.

ParamStr[n] - это массив значений аргументов, первый аргумент - это ParamStr[1] и т. д.

Например, следующий скрипт выводит список переданных ему параметров:

@SCRIPT JSPL
@LANG JS
hello();
function hello(){
GetParams();
var i,s;
s='';
for(i=1;i<=ParamCount;i++)s+=i+' - '+ParamStr[i]+'\n';
return s;
};

При выполнении %FNJSPL('one','two','three') в шаблоне вы получите:

1 - one
2 - two
3 - three

И в завершении этой краткой статьи приведу макрос, вычисляющий количество секунд между двумя датами (со временем):

@SCRIPT SECSBETWEEN
@LANG JS
calc();
function calc(){
GetParams();
if(ParamCount<2)return "Wrong number of parameters";
d1=new Date(ParamStr[1]);
d2=new Date(ParamStr[2]);
dt=Math.abs((d1.getTime()-d2.getTime())/1000);
return Math.round(dt);
};

Теперь при выполнении %FNSECSBETWEEN("18/02/1981 14:00:15","25/01/1985 16:00:00")
вы узнаете, что между 18 февраля 1981 года, 14:00:15 и 25 января 1985 года, 16:00:00 содержится 144644385 секунд.

Желаю успехов в тестировании, присылайте интересные макросы мне на ящик, я включу их в дистрибутив следующих версий UMX.