Насчет красивости %sec=%t; %sec%=60; и тп:
работает и оператор с двумя операндами

%sec = $(%t % 60); %min = $(%t % 3600) и тд
Вот мой скрипт
sayuptime для Windows (тестировался только на Windows XP Pro SP2):
alias(sayuptime)
{
%com = "net stats workstation";
# Запоминаем текущее окно, в которое нужно вывести uptime
%UptimeTargetID = $window
exec -b (%com)
{
if ($0 == "stdout")
{
%statsOutput = $1
if (%statsOutput<>"")
{
#echo %StatsOutput
%str = %statsOutput;
# Вырезаем время загрузки системы
# И преобразуем его в формат YYYY mm dd hh MM PM|AM
%str =~ s/.*(\\d+)\/(\\d+)\/(\\d+) (\\d+):(\\d+) (AM|PM).*/\\3 \\1 \\2 \\4 \\5 \\6/gi
%tmparr = $str.split(" ", %str)
# Переходим к 24-х часовому формату времени
if (%tmparr[5] == "PM")
%tmparr[3] += 12;
%year = %tmparr[0];
%month = %tmparr[1];
%day = %tmparr[2];
%hour24 = %tmparr[3];
%min = %tmparr[4];
%dim = $array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
# Текущее время
%cyear = $date(Y);
%cmonth = $date(m);
%cday = $date(d);
%chour24 = $date(H);
%cmin = $date(M);
# Считаем минуты, часы, дни аптайма
%mins = $(%cmin-%min);
%hours = $(%chour24-%hour24);
if (%mins < 0)
{
%hours--;
%mins += 60;
}
%days = $(%cday-%day);
if (%hours < 0)
{
%days--;
%hours += 24;
}
if (%days < 0)
{
%cmonth--;
if (%cmonth == 0) %cmonth = 12;
%days += %dim[%month1];
}
while(%month != %cmonth)
{
%days += %dim[%month];
%month++;
if (%month == 13) %month = 1;
}
#echo Uptime is %days d %hours h %mins m
say -r=%UptimeTargetID Uptime is %days d %hours h %mins m
#%Totalminutes =$( $( $(%days*24) + %hours) + %mins)
}
else
{
echo "No output? :/"
}
}
}
}
Обновление:
Последняя версия доработанного и протестированного скрипта - в архиве по ссылке в моем следующем посте
Обновление:
17 авг 2007. Выявлена и исправлена некорректная работа при пересечении границы года
Замечания:
1. Требует доработки в плане учета високосных годов (28 или 29 дней в феврале

)
2. Точность ограничена минутой, так как команда net stats workstation выдает время загрузки системы с точностью до минуты.
3. Глобальная переменная
%UptimeTargetID введена, потому что у меня никак не получилось использовать второй параметр команды exec - <magic data:variant>, который, судя по хелпу, должен быть доступен внутри callback-функции как параметр $2.
4. Скрипт еще не подвергался всесторонему тестированию в плане верности результатов

Ваши замечания приветствуются!