मैंने यह बैच फ़ाइल बनाई जो दो घटनाओं के लिए एक टाइमर के रूप में काम करती है और उनके माध्यम से बार-बार लूप देती है (अनिश्चित काल तक जब तक आप इसे नहीं मारते)। यह पहली घटना में बिताए गए समय की भी गणना करता है और साथ ही दूसरी घटना शुरू होने तक का समय समाप्त हो जाता है। यह आउटपुट को टेक्स्ट फाइल में पोस्ट करता है। टाइमर बस ठीक काम करता है, लेकिन अवधि की गणना iffy कभी-कभी होती है (हालांकि अधिकांश समय यह ठीक काम करता है)।
मुद्दे:
यदि टाइमर को 2 बजे के बीच शुरू किया जाता है (और 12 बजे हो सकता है, तो मैंने उस समय इसका परीक्षण नहीं किया है) सुबह 9:59 बजे, अवधि की गणना नहीं की जाती है। मुझे इसके बजाय पाठ फ़ाइल में पोस्ट की गई पहली घटना का अंतिम रोक समय मिलता है।
कभी-कभी, जब मैं सुबह में टाइमर चलाता हूं, विशेष रूप से सुबह में लगभग 5 या 6 बजे सुबह की तरह, अवधि की गणना 00:00:00 होगी। हालांकि एक शुरुआती और रुकने का समय था। मजेदार बात यह है, टाइमर ज्यादातर समय ठीक काम करता है और यह केवल इस समस्या को बेतरतीब ढंग से पैदा करता है।
क्या एक घटना के लिए टाइमर को छोड़ना और बैच की नौकरी समाप्त किए बिना अगले को जारी रखना संभव है? यदि हाँ, तो कैसे करें? कृपया एक उदाहरण कोड पोस्ट करें।
क्या कोई व्यक्ति हाइलाइट करेगा जहां कोड गलत है और कृपया ठीक पोस्ट करें।
और जो कोई भी इस पोस्ट को बंद करना चाहता है, क्योंकि वह सोचता है कि यह महत्वपूर्ण नहीं है, उपयोगी नहीं है, आदि .., कृपया पहले मेरे मुद्दों को ठीक करें या किसी को पोस्ट बंद करने से पहले ऐसा करने दें।
मैंने यहां पोस्ट बनाने की कोशिश करने से पहले इन मुद्दों को ठीक करने के लिए घंटों-घंटे बिताए, इसलिए कृपया कुछ समझें।
यहाँ कोड है:
@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