बैच फ़ाइल टाइमर और अवधि कैलकुलेटर


0

मैंने यह बैच फ़ाइल बनाई जो दो घटनाओं के लिए एक टाइमर के रूप में काम करती है और उनके माध्यम से बार-बार लूप देती है (अनिश्चित काल तक जब तक आप इसे नहीं मारते)। यह पहली घटना में बिताए गए समय की भी गणना करता है और साथ ही दूसरी घटना शुरू होने तक का समय समाप्त हो जाता है। यह आउटपुट को टेक्स्ट फाइल में पोस्ट करता है। टाइमर बस ठीक काम करता है, लेकिन अवधि की गणना iffy कभी-कभी होती है (हालांकि अधिकांश समय यह ठीक काम करता है)।

मुद्दे:

  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

मुझे नहीं मिला! कोई भी इन मुद्दों के लिए एक जवाब है ?! कृपया लोग, आप में से एक इसे हल करें।
Rookie

@DavidPostill आप इस मंच पर एक राजा की तरह लग रहे हैं। क्या आप संभवतः यहाँ मेरी मदद करेंगे, कृपया।
Rookie

@ गाइनड मैंने उस स्क्रिप्ट के समान कुछ सूत्र का उपयोग किया था जिसे आपने एक बार पोस्ट किया था। लेकिन समय की गणना आधी रात के बाद नहीं की जा रही है। मैं इस लिंक पर जो भी पोस्ट कर रहा हूं, उस पर प्रयोग कर रहा हूं लेकिन अब तक कोई भाग्य नहीं stackoverflow.com/questions/605522/... । क्या आप मुझे बता सकते हैं कि क्या गलत है और इसे कैसे ठीक किया जाए। धन्यवाद
Rookie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.