Я создал этот пакетный файл, который работает как таймер для двух событий и перебирает их снова и снова бесконечно (пока вы не убьете его). Также рассчитывается время, потраченное на первое событие, плюс время, прошедшее до начала второго события. Это опубликовать вывод в текстовый файл. Таймер работает просто отлично, но расчет длительности иногда бывает ненадежным (хотя большую часть времени он работает нормально).

Вопросы:

  1. если таймер запускается между 2 часами ночи (а может быть и 12 часами утра, когда я его не проверял) до 9:59 утра, продолжительность вычисляться не будет. Вместо этого я получаю время последней остановки первого события, отправленного в текстовый файл дважды.

  2. Иногда, когда я запускаю таймер утром, особенно очень рано утром, например, около 5 или 6 часов утра, продолжительность будет рассчитываться в 00:00:00. хотя было время запуска и остановки. Самое смешное, что таймер в большинстве случаев работает нормально, и он создает эту проблему только случайным образом.

  3. Можно ли пропустить таймер для одного события и перейти к следующему, не прерывая пакетное задание? если да, то как это сделать? пожалуйста, отправьте пример кода.

Будет ли кто-то выделить, где код неправильный и опубликовать исправление, пожалуйста.

А для тех, кто хочет закрыть этот пост только потому, что он считает, что это не важно, бесполезно и т.д., Пожалуйста, сначала исправьте мои проблемы или позвольте кому-нибудь сделать это, прежде чем закрыть пост.

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

Вот код:

@ECHO off

MODE CON:COLS=46 LINES=9

echo --------------------------------- >> C:\Users\username\Desktop\Progress.txt

echo. >> C:\Users\username\Desktop\Progress.txt

echo %date% >> C:\Users\username\Desktop\Progress.txt

set counter=0

set TST=0

:1

@echo off

setlocal

rem The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99
set STARTTIME=%TIME%

@echo off 

set /a counter=counter+1

set /a TST=TST+%duration%

rem now break the centiseconds down to hors, minutes, seconds and the remaining centiseconds
set /A TSTH=%TST% / 360000
set /A TSTM=(%TST% - %TSTH%*360000) / 6000
set /A TSTS=(%TST% - %TSTH%*360000 - %TSTM%*6000) / 100
set /A TSTHS=(%TST% - %TSTH%*360000 - %TSTM%*6000 - %TSTS%*100)

rem some formatting
if %TSTH% LSS 10 set TSTH=0%TSTH%
if %TSTM% LSS 10 set TSTM=0%TSTM%
if %TSTS% LSS 10 set TSTS=0%TSTS%
if %TSTHS% LSS 10 set TSTHS=0%TSTHS%

echo. >> C:\Users\username\Desktop\Progress.txt

echo Total Time: %TSTH%:%TSTM%:%TSTS% Plus >> C:\Users\username\Desktop\Progress.txt
echo Started on: %time%  >> C:\Users\username\Desktop\Progress.txt


color f0

cls 

:hour

set hour=1                            

:min

set min=0

:second

set second=0

:countit

cls                                                          

echo                  Main Event
echo            %date%
echo.
echo   %min%    Minutes  
echo   %sec%    Seconds
echo        Hours #    %counter%
echo        Total Time: %TSTH%:%TSTM%:%TSTS%

set /a sec="%sec%-1"

if %sec%==-1 set /a min="%min%-1"
if %sec%==-1 set /a sec="59"
if %min%==-1 set /a hour="%hour%-1"
if %min%==-1 set /a min="59"
if %hour%==-1 goto 2

ping -n 2 127.0.0.1 >NUL

goto countit

:2

start "" "C:\Users\username\Desktop\Timer file\1.mp3"

echo.

pause>nul

echo Are You Sure?

pause>nul

cls

echo Okay then, Ready..

Pause>nul

@echo off

echo stopped on: %time%  >> C:\Users\username\Desktop\Progress.txt

set ENDTIME=%TIME%

rem output as time
echo STARTTIME: %STARTTIME%
echo ENDTIME:    %ENDTIME%

rem convert STARTTIME and ENDTIME to centiseconds
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)

rem calculating the duratyion is easy
set /A DURATION=%ENDTIME%-%STARTTIME%

rem now break the centiseconds down to hors, minutes, seconds and the remaining centiseconds
set /A DURATIONH=%DURATION% / 360000
set /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000
set /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100
set /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100)

rem some formatting
if %DURATIONH% LSS 10 set DURATIONH=0%DURATIONH%
if %DURATIONM% LSS 10 set DURATIONM=0%DURATIONM%
if %DURATIONS% LSS 10 set DURATIONS=0%DURATIONS%
if %DURATIONHS% LSS 10 set DURATIONHS=0%DURATIONHS%

rem outputing
echo Duration is %DURATIONH%:%DURATIONM%:%DURATIONS% >> C:\Users\username\Desktop\Progress.txt

cls

:4

color e0

cls

:hour

set hour=0                           

:min

set min=10

:sec

set sec=0

:continue

cls                                                             

echo                   Break...
echo            %date%
echo.                                                           
echo   %min%    Minutes  
echo   %sec%    Seconds
echo        Hours #    %counter%
echo        Total Time: %TSTH%:%TSTM%:%TSTS%

set /a sec="%sec%-1"

if %sec%==-1 set /a min="%min%-1"
if %sec%==-1 set /a sec="59"
if %min%==-1 set /a hour="%hour%-1"
if %min%==-1 set /a min="59"
if %hour%==-1 goto 3

ping -n 2 127.0.0.1 >NUL

goto continue

:3

start "" "C:\Users\username\Desktop\Timer file\2.mp3"

echo.

pause>nul

echo Are You Sure?

pause>nul

cls

echo Okay then, Ready..

Pause>nul

cls

goto 1

0