प्रश्न दिलचस्प था इसलिए मैंने बैच लिखा जो आपके लिए काम कर सकता है।
मूल रूप से यह काउंटडाउन टाइमर है, मैंने इसे shutdown
कमांड शामिल नहीं किया, लेकिन इसे होमवर्क के रूप में शामिल किया। गणना सटीक नहीं है, यह लीप वर्ष, महीने की लंबाई के बारे में परवाह नहीं करता है ... यह मुख्य रूप से पठनीयता के लिए है क्योंकि मैं इसे सीखना आसान रखना चाहता था।
वर्तमान में दो फाइलें एक साथ काम कर रही हैं, एक टाइमर शुरू करता है और अन्य, जब कहा जाता है, बताता है कि टाइमर शुरू होने से कितना समय बीत गया। इन दो फ़ाइलों को काफी आसानी से एक सीएमडी स्क्रिप्ट में जोड़ा जा सकता है, इस तरह आप कुछ लाइनों को पुन: प्रयोज्य ( जैसे परिभाषित तरीके ) भी बना सकते हैं।
ठीक है, आइए स्क्रिप्टों पर एक नज़र डालें,
यहाँ है StartTimer.cmd
:
@ECHO OFF
FOR /F "skip=1 tokens=1-6" %%a IN ('wmic Path Win32_Localtime GET year^,month^,day^,hour^,minute^,second /format:TABLE ^| findstr /r "."') DO (
SET DateD=%%a
SET TimeH=%%b
SET TimeM=%%c
SET DateM=%%d
SET TimeS=%%e
SET DateY=%%f
)
SET /A EPOCH=((%DateY%-1970)*365*24*60*60)+(%DateM%*30*24*60*60)+(%DateD%*24*60*60)+(%TimeH%*60*60)+(%TimeM%*60)+%TimeS%
ECHO %EPOCH% > Timer.start.state
के साथ शुरू लाइन में FOR /F "skip=1 ...
:
1.wmic
वर्तमान समय और तारीख के लिए पूछें ।
2. आउटपुट की पहली पंक्ति को छोड़ें, जो हेडिंग है, skip=1
3. द्वारा अलग किए गए tokens=1-6
अर्थ का उपयोग करके मान पढ़ें । 4. स्टोर चर के मूल्यों , ... , , ...%%a-%%f
Spaceor
TAB
%DateY%
%TimeH%
%TimeM%
उसके बाद लाइन शुरू करने पर SET /A EPOCH=...
हम अभिव्यक्ति का उपयोग करते हैं जो सेकंड से बीते हुए समय की1.1.1970
गणना करता है ( यह सरल अनुमानित है, वास्तविक यूनिक्स समय नहीं है। यदि आपको सटीक आवश्यकता है तो Google देखें )।
फिर अंतिम पंक्ति में ECHO %EPOCH% > ...
" Timer.start.state
" नामक फाइल करने के लिए परिकलित समय लिखते हैं ।
और यहाँ GetTimerValue.cmd
:
@ECHO OFF
GOTO CHECKFILE
:TIMEOUT
FOR /F "skip=1 tokens=1-6" %%a IN ('wmic Path Win32_Localtime GET year^,month^,day^,hour^,minute^,second /format:TABLE ^| findstr /r "."') DO (
SET DateD=%%a
SET TimeH=%%b
SET TimeM=%%c
SET DateM=%%d
SET TimeS=%%e
SET DateY=%%f
)
SET /P Timer=<"Timer.start.state"
SET /A EPOCH=((%DateY%-1970)*365*24*60*60)+(%DateM%*30*24*60*60)+(%DateD%*24*60*60)+(%TimeH%*60*60)+(%TimeM%*60)+%TimeS%
SET /A Elapsed=%EPOCH%-%Timer%
ECHO "Seconds since timer started: %Elapsed%"
GOTO EOF
:CHECKFILE
IF EXIST "Timer.start.state" (
GOTO TIMEOUT
) ELSE (
ECHO "Timer not started. Start timer by running Timer.cmd"
)
:EOF
यहां कोड प्रवाह ऊपर से नीचे तक रैखिक नहीं है। सबसे पहले हम GOTO CHECKFILE
लेबल लगाते हैं ताकि निष्पादन कमांड वास्तव में लाइन पर शुरू होती है जो कहती है :CHECKFILE
। यहाँ बहुत सी बातें बस एक जैसी हैं StartTimer.cmd
इसलिए मैं केवल नई या बदली हुई पंक्तियों को समझाता हूँ।
पहले हम जांचते हैं कि क्या राज्य फ़ाइल Timer.start.state
मौजूद है, यदि नहीं तो बुद्धि संदेश को समाप्त कर दें। यदि टाइमर शुरू हुआ और फाइलें मौजूद हैं तो हम जारी रखते हैं और कुछ गणित करते हैं:
1. यहां :TIMEOUT
जायें जहां हम कुछ सेकंड के लिए आउटपुट करते हैं। आप उसके लिए बेहतर लेबल चुन सकते हैं ...
2. SET /P %Timer% ...
फ़ाइल से प्रारंभ समय पढ़ता है और %Timer%
चर के लिए मान असाइन करता है।
3. SET /A Elapsed ...
शुरू समय और अब के बीच सेकंड की गणना करता है।
4. ECHO "Seconds ...
गणना मूल्य (सेकंड के बाद से टाइमर स्टार्टअप।
शेष समय कैसे प्राप्त करें:
आप %Elapsed%
से घटा सकते हैं %MaxTime%
:
@ECHO OFF
GetTimerValue
SET /A TimeLeft=%MaxTime%-%Elapsed%
ECHO "You have %TimeLeft% seconds remaining"
ठीक है, काफी समझाया। यहाँ पूरी स्क्रिप्ट है Timer.cmd
:
इस बिंदु पर, पहले से ही कहा गया सब कुछ भूल गया। यहाँ यह बैच फ़ाइल अपने आप में काम कर रही है इसलिए कोई अलग StartTimer.cmd
या GetTimerValue.cmd
केवल यह नहीं है Timer.cmd
। मूल रूप से यह अभी भी समान है लेकिन कोड प्रवाह अलग है और उपयोग भी पूरी तरह से अलग है। हालाँकि यह राज्य को फ़ाइल करने के लिए सहेजता नहीं है इसलिए आप लॉगऑफ़ / रिबूट के बाद टाइमर मूल्य प्राप्त नहीं कर सकते हैं, यदि आपको फ़ाइल से / को राज्य को बचाने / पढ़ने के लिए ऊपर इस उपयोग उदाहरण की आवश्यकता है।
Timer.cmd
बिना तर्क के चलने पर उपयोग / मदद के लिए मुद्रित किया जाता है। मैंने इसका पूरी तरह से परीक्षण नहीं किया है और कुछ टाइपो आदि हो सकते हैं, आर्गन्स की जाँच नहीं की गई है।
@ECHO OFF
GOTO TimerUser%1
:: ===================================
:: Operation is start, (re)start timer
:: ===================================
:TimerUserstart
ECHO %2 | FINDSTR /R "^[1-9]"
IF %ERRORLEVEL%==0 (
SET Timer.max=%2
GOTO TimerStart
) ELSE (
ECHO.
ECHO !! ERROR !!
ECHO You must specify maximum value.
ECHO ===============================
GOTO TimerUser
)
:: =============================================
:: Operation is get, get values if timer running
:: =============================================
:TimerUserget
IF DEFINED Timer.start.state (
GOTO TIMEOUT
) ELSE (
ECHO.
ECHO !! ERROR !!
ECHO Timer is not started, start timer first.
ECHO ========================================
GOTO TimerUser
)
:: ============
:: Usage / Help
:: ============
:TimerUser
ECHO.
ECHO Timer.cmd Usage: Timer.cmd operation [options]
ECHO.
ECHO - Operations
ECHO start Start new timer, n must be specified.
ECHO get Get current value of started timer.
ECHO.
ECHO - Options:
ECHO n Max value in seconds, used to calculate remaining time.
ECHO.
GOTO EOF
:: =============================
:: Update %Timer.epoch% variable
:: =============================
:TimerUpdateEpoch
FOR /F "skip=1 tokens=1-6" %%a IN ('wmic Path Win32_Localtime GET year^,month^,day^,hour^,minute^,second /format:TABLE ^| findstr /r "."') DO (
SET DateD=%%a
SET TimeH=%%b
SET TimeM=%%c
SET DateM=%%d
SET TimeS=%%e
SET DateY=%%f
)
SET /A Timer.epoch=((%DateY%-1970)*365*24*60*60)+(%DateM%*30*24*60*60)+(%DateD%*24*60*60)+(%TimeH%*60*60)+(%TimeM%*60)+%TimeS%
GOTO %Timer.Callback%
:: ===========================================
:: Start new timer destoying/resetting old one
:: ===========================================
:TimerStart
SET Timer.Callback=TimerStartC1
GOTO TimerUpdateEpoch
:TimerStartC1
SET Timer.start.state=%Timer.epoch%
GOTO EOF
:: =============================
:: Echo out current timer values
:: =============================
:TIMEOUT
SET Timer.Callback=TimerEchoJ1
GOTO TimerUpdateEpoch
:TimerEchoJ1
SET /A Timer.elapsed=%Timer.epoch%-%Timer.start.state%
SET /A Timer.remaining=%Timer.max%-%Timer.elapsed%
ECHO "Seconds since timer started: %Timer.elapsed% Time remaining %Timer.remaining%"
GOTO EOF
:EOF
shutdown
किसी अन्य कमांड के साथ एकीकृत करें :
फ़ाइल poweroff.cmd
:
@ECHO OFF
Timer start %1
shutdown -t %1 -s
उपयोग: poweroff <wait_seconds>
समयबद्ध शटडाउन शुरू Timer get
करने के लिए और शेष / शेष समय पाने के लिए।
/c <time>
) करता है।