Эта статья рассказывает, как определить время работы скрипта или программы и вывести на экран. В bat файле полученное значение времени можно использовать, например, для вывода диагностических сообщений, если команда выполнялась слишком долго.

Возможности bat файла не предусматривают операций со временем, поэтому придётся использовать другие инструменты.

Замерить время выполнения с помощью WSH JScript

Как измерить время выполнения в скрипте WSH Jscript

В JScript есть объекты и функции для работы со временем, поэтому определение времени реализуется просто:

var wsh_shell=WScript.CreateObject("WScript.Shell");
var start_time = new Date();
var rc = wsh_shell.Run(WScript.Arguments.Item(0),1,true);
var stop_time = new Date();
var diff = stop_time - start_time;
WScript.Quit(diff);

Логика работы скрипта простая: скрипт выполняет заданную аргументом команду в синхронном режиме, снимая метки времени перед запуском команды и после её завершения, затем вычисляет разницу в миллисекундах и передаёт в вызывающий процесс в виде возвращаемого значения.

Пример вызова этого скрипта в bat файле::

cscript //nologo rt.js "nhrt.exe -list:rt12.txt -r *.txt"
echo %errorlevel% ms

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

1542 ms

Это время выполнения программы, то есть 1 сек 542 мс.

Не всегда нужно выводить время с точностью до миллисекунд, в этом случае можно изменить скрипт и выводить секунды:

var wsh_shell=WScript.CreateObject("WScript.Shell");
var start_time = new Date();
var rc = wsh_shell.Run(WScript.Arguments.Item(0),1,true);
var stop_time = new Date();
var diff = stop_time - start_time;
WScript.Quit(diff/1000);

Как вставить скрипт WSH JScript в bat файл

Чтобы не распространять скрипт JScript, можно вставить команды его создания в сам bat файл, то есть bat файл сначала создаёт скрипт rt.js, а потом запускает его:

@echo off

echo var wsh_shell = WScript.CreateObject("WScript.Shell"); > rt.js
echo var start_time = new Date(); >> rt.js
echo var rc = wsh_shell.Run(WScript.Arguments.Item(0),1,true); >> rt.js
echo var stop_time = new Date(); >> rt.js
echo var diff = stop_time - start_time; >> rt.js
echo WScript.Quit(diff); >> rt.js

cscript //nologo rt.js "ping.exe microsoft.com"
echo %errorlevel% ms

Как выполнить действия исходя из времени выполнения

Чтобы не просто показать значение времени, а выполнить какое-то действие, используется стандартный оператор if.

cscript //nologo rt.js "ping.exe microsoft.com"
set rt=%errorlevel%
if rt GTR 30000 nhcolor 0c Превышено время выполнения (%rt%ms)

Этот пример записывает значение времени выполнения в переменную, затем проверяет значение: если время выполнения больше 30 секунд (30 000 миллисекунд), выводит сообщение красным цветом (программой nhcolor).

Узнать больше

nhcolor

Как измерить время выполнения в bat файле
Метки:     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *