[CMD/BAT] Таймер

Moxito

Разработчик
Сообщения
194
Симпатии
31
Баллы
33
#1
Здравствуйте.
Есть выполнение какой-либо функции. Мне нужно отмерять время выполнения. У меня в голове БЫЛО так:
Переменная ftime=0
Переменная ttime=7 (припустим)
echo ttime-ftime
Выбивает 7 (кмд сам считает)

Но если задать в обоих переменных %time% то ttime-ftime уже не поможет.
Подскажите, как отнять вторую переменную ttime (в которой после функции ставится %time%) от первой переменной ftime (вначале функции ставится %time%). Заранее спасибо.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#2
CMD/BATCH:
@echo off
Setlocal EnableDelayedExpansion
 
Call :Timer Start
pause
Call :Timer End
 
pause>nul
goto :eof
 
:Timer
  if "%~1"=="Start" (
    Set StartTime=%time%
    Echo Время запуска    !StartTime!
  ) else (
    Set EndTime=%time%
    Echo Время завершения !EndTime!
    Call :TimeElapsed "%StartTime%" "!EndTime!" ret
    Echo Прошло                  !ret! c.
  )
exit /B
 
:TimeElapsed %1-StartTime %2-EndTime %3-var_result
  Call :TimeToMSec "%~1" TimeS_ms
  Call :TimeToMSec "%~2" TimeE_ms
  Set /A diff=TimeE_ms-TimeS_ms
  Set /A diffSS=diff/100
  Set /A diffms=%diff% %% 100
  if "%diffms:~1%"=="" Set diffms=0%diffms%
  Set %3=%diffSS%,%diffms%
Exit /B
 
:TimeToMSec %1-Time 2-var_mSec
  For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
    Set /A HH=%%A
    Set MM=1%%B& Set /A MM=!MM!-100
    Set SS=1%%C& Set /A SS=!SS!-100
    Set mS=1%%D& Set /A mS=!mS!-100
  )
  Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B
 

Moxito

Разработчик
Сообщения
194
Симпатии
31
Баллы
33
#3
CMD/BATCH:
@echo off
Setlocal EnableDelayedExpansion

Call :Timer Start
pause
Call :Timer End

pause>nul
goto :eof

:Timer
  if "%~1"=="Start" (
    Set StartTime=%time%
    Echo Время запуска    !StartTime!
  ) else (
    Set EndTime=%time%
    Echo Время завершения !EndTime!
    Call :TimeElapsed "%StartTime%" "!EndTime!" ret
    Echo Прошло                  !ret! c.
  )
exit /B

:TimeElapsed %1-StartTime %2-EndTime %3-var_result
  Call :TimeToMSec "%~1" TimeS_ms
  Call :TimeToMSec "%~2" TimeE_ms
  Set /A diff=TimeE_ms-TimeS_ms
  Set /A diffSS=diff/100
  Set /A diffms=%diff% %% 100
  if "%diffms:~1%"=="" Set diffms=0%diffms%
  Set %3=%diffSS%,%diffms%
Exit /B

:TimeToMSec %1-Time 2-var_mSec
  For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
    Set /A HH=%%A
    Set MM=1%%B& Set /A MM=!MM!-100
    Set SS=1%%C& Set /A SS=!SS!-100
    Set mS=1%%D& Set /A mS=!mS!-100
  )
  Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B
Здравствуйте. Не работают "!StartTime!". Не отображаются в выводе (вместо того пишет имя переменной с воскл. знаками).
Сообщения объединены:

И нельзя ли сделать как-то так?

set ftime=%time%
echo %ftime%
timeout /t 2 /nobreak>nul
set ttime=%time%
echo %ttime%
set otime=%ttime%-%ftime%
echo %otime%


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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#4
Здравствуйте. Не работают "!StartTime!". Не отображаются в выводе (вместо того пишет имя переменной с воскл. знаками).
Не может такого быть. Вы в коде точно ничего не изменяли?
Setlocal EnableDelayedExpansion - не удаляли?

И нельзя ли сделать как-то так?
Нет, нельзя.
 
Сверху Снизу