প্রশ্ন আকর্ষণীয় ছিল তাই আমি ব্যাচ লিখেছি যা আপনার পক্ষে কাজ করতে পারে।
মূলত এটি কাউন্টডাউন টাইমার, আমি অন্তর্ভুক্ত করি নি 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
বর্তমান সময় এবং তারিখের জন্য জিজ্ঞাসা করুন ।
২. আউটপুটটির প্রথম লাইনটি এড়িয়ে যান, যা শিরোনাম হয়, skip=1
৩ দ্বারা পৃথক 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%
ভেরিয়েবলের মান নির্ধারণ করে ।
৩. SET /A Elapsed ...
আরম্ভের সময় এবং এখনকার মধ্যে সেকেন্ড গণনা করে।
৪. 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>
) হিসাবে যোগ করার পরিবর্তিত নয় is