Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как в .bat сделать секундомер?

Ответить
Настройки темы
CMD/BAT - Как в .bat сделать секундомер?

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Не подскажете как в .bat можно было бы сделать секундомер?
Например мы его открываем и там появляется:

Прошло 0 дн. 13ч. 11мин. 5сек.

Чтобы считал после открытия

Отправлено: 14:37, 15-05-2018

 

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я сделал примерный код, но у меня есть проблема - секунды/минуты и тд. после прохождения не обнуляются.
То есть:
Прошло 179346 сек. 2989,1 мин. 49,8 ч. 2 дн.
Я хотел бы сделать так чтобы после прохождения 60сек. они обнулялись и начинали сначала "1 2 3 4", при этом переходя в минуты.
Вот мой код:

@echo off
set var=peremenna9
set /a var=1
goto st
:loop
ping -n 2 127.0.0.1 > nul
:st
title Счётчик работает %var% сек
cls
Echo.
Echo.
Echo.
Echo (пк)Счётчик работает %var%сек. %mn% мин. %ho%ч. %dn%дн.
set /a var+=1
set /a mn=%var%/60
set /a ho=%mn%/60
set /a dn=%ho%/24
color e
goto loop

Отправлено: 14:42, 15-05-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


DenchickDenchick, а) так секундомеры не пишут, б) работать с датой/временем на пакетных файлах можно, но чересчур муторно и ненаглядно.

Отправлено: 20:46, 15-05-2018 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


DenchickDenchick, только получается программу написать хотели вы, а написал ее вместо вас я, типа украл идею.
Код: Выделить весь код
@echo off
set /a "ss=0,mm=0,hh=0,dd=0"

:s
 >nul ping -n 2 127.0.0.1& set /a ss+=1
 if %ss%==60 set /a "mm=ss/60,hh=ss/3600,dd=ss/86400,ss=0"
 echo Счётчик работает: %ss% сек,%mm% мин,%hh% час,%dd% дн
goto s
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:02, 16-05-2018 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


alpap, спасибо за помощь, но здесь что-то немного не так. Скорее всего я не совсем верно сформулировал свой вопрос
После прохождения 60 сек он переходит в 1 мин, но после повторного прохождения 60 сек далее не прибавляются минуты, часы, дни и так далее.

Отправлено: 14:50, 16-05-2018 | #5


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Самое забавно начнется когда эта штука заработает. Тогда я предложу заценить разницу между этим "секундометром" и обычным на промежутке времени, например, в сутки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:12, 16-05-2018 | #6


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата DenchickDenchick:
но после повторного прохождения 60 сек »
да, извиняюсь, это мой косяк, исправил:
Код: Выделить весь код
@echo off
set /a "ss=0,mm=0,hh=0,dd=0"

:s
 >nul ping -n 2 127.0.0.1& set /a ss+=1
 if %ss%==60 set /a mm+=1,ss=0
 if %mm%==60 set /a hh+=1,mm=0
 if %hh%==24 set /a dd+=1,hh=0
 if %dd%==365 echo Процессор сдох& pause
 echo Счётчик работает: %ss% сек,%mm% мин,%hh% час,%dd% дн
goto s
pause
DenchickDenchick, а вот это очень верное верное замечание, если точность нужна как таковая
Цитата Elven:
разницу между этим "секундометром" и обычным »
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:08, 16-05-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Я лично вообще не понимаю, в чём смысл авторского видения вопроса. Во-первых, как уже было неоднократно сказано, код считает не секунды, а время исполнения утилиты ping.exe. Во-вторых, ничего ценного и полезного, окромя вышеуказанного, код не делает (и не может делать в принципе). Так что на самом деле было нужно?

Последний раз редактировалось Iska, 17-05-2018 в 07:09. Причина: Грамматика: добавил пропущенную запятую

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:12, 16-05-2018 | #8


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, да так, ради интереса.

Отправлено: 10:35, 19-05-2018 | #9


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


DenchickDenchick,
Если не жалко грузить процессор дурной работой, то из любви к абстрактному искусству:
Код: Выделить весь код
@Echo Off
cls

Set /A Days=0

Set "T00=%Time%"
Call :TtoN "%T00%" "N0"
Set "D0=%Date%"
Set "D00=%D0%"

:Begin
	Call :TtoN "%Time%" "Nt"
	If Not "%Date%"=="%D0%" (Set "D0=%Date%" &Set /A Days=%Days%+86400)
	Set /A Nt=Nt+%Days%-%N0%
	Call :NtoT %Nt% "DD" "HH" "MM" "SS"
	cls
	Echo Прошло DD:HH:MM:SS=%DD%:%HH%:%MM%:%SS% с момента %D00% %T00:~0,-3% 
        TimeOut /T 1 >nul
GoTo :Begin
GoTo :Eof
                                                                    
:TtoN
	SetLocal &Set "tt=%~1"
	Set "tt=%tt: =0%"
	Set /A tt=1%tt:~6,2%-100+(1%tt:~3,2%-100)*60+(1%tt:~0,2%-100)*3600
	EndLocal &Set "%~2=%tt%"
GoTo :Eof

:NtoT
SetLocal
	Set /A tt2=%1/86400+100 
	Set /A tt3=(%1-(%tt2%-100)*86400)/3600+100
	Set /A tt4=(%1-(%tt2%-100)*86400-(%tt3%-100)*3600)/60+100
	Set /A tt5=(%1-(%tt2%-100)*86400-(%tt3%-100)*3600-(%tt4%-100)*60)+100
	EndLocal &Set "%~2=%tt2:~1,2%" &Set "%~3=%tt3:~1,2%" &Set "%~4=%tt4:~1,2%" &Set "%~5=%tt5:~1,2%"
GoTo :Eof
Если в системе есть команда Timeout (в Win 7 она имеется, проверьте, сделайте в командном окне timeout /?), то после Echo можно вставить команду
TimeOut /T 1 >nul
Это снизит дурную нагрузку на процессор, но, возможно, некоторое значение секунд при отображении будет пропущено. Но накопление погрешности отображения секунд в случае, как это было у alpap, не будет
Как это работает: берётся разница во времени от команды Time при запуске и далее эта команда выполняется каждый раз, когда надо посчитать разность. Значения time (часы, минуты, секунды) сводятся к секундам, затем разница пересчитывается в дни:часы:минуты:секунды

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-05-2018 в 11:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:42, 19-05-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как в .bat сделать секундомер?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Как сделать не закрывающийся .Bat Aifear Скриптовые языки администрирования Windows 6 15-11-2016 18:15
CMD/BAT - Как сделать скриншот экрана через cmd или bat? bobojonkholikov Скриптовые языки администрирования Windows 11 12-07-2015 02:33
CMD/BAT - Как в .bat сделать вывод информации правах? Eugene Shugaev Скриптовые языки администрирования Windows 4 12-03-2014 11:55
CMD/BAT - [решено] Запуск bat-файла от имени админа.Как сделать каталог этого bat-файла текущим?? axmed0207 Скриптовые языки администрирования Windows 1 19-01-2012 06:14
Как сделать общий почтовый ящик с помощью The Bat! ivieDVeD Хочу все знать 1 15-03-2008 16:48




 
Переход