সময়সূচী বন্ধ হওয়ার আগে কি সময় বাকি?


8

উইন্ডোজ in-এ নির্ধারিত শাটডাউন হওয়ার আগে কত সময় বাকি আছে তা দেখার কোনও উপায় আছে কি?

নির্ধারিত শাটডাউন দ্বারা আমি বোঝাতে চাইছি কমান্ড লাইন shutdown.exeঅ্যাপ্লিকেশনটি ব্যবহার করে একটি শাটডাউন (বা পুনঃসূচনা) নির্ধারিত , যেমন:

shutdown /t 600 /s

এটি একটি বার্তা বাক্সে পপ আপ করবে যা বলেছে শাটডাউন পর্যন্ত 10 মিনিট এবং শাটডাউনের আসল সিস্টেম সময়।

600সেকেন্ডের চেয়ে বেশি সময় যেকোন সময় এর পরিবর্তে একটি বেলুন বার্তা ব্যবহার করে।

আমি অস্পষ্টভাবে একটি গণনা সহ একটি জিইউআই অগ্রগতি মনিটর সরবরাহকারী এক্সপি স্মরণ করি।

তারা কীভাবে কাজ করেছিল? শাটডাউন সময় বা নির্ধারিত সময় অবশ্যই কোথাও সংরক্ষণ করতে হবে, আমি কীভাবে এটি অ্যাক্সেস করতে পারি?

কমান্ড লাইনের (যেমন- নন-জিইউআই) মাধ্যমে আমার পছন্দটি কিছু পদ্ধতি। আরও গুরুত্বপূর্ণ বিষয়, উইন্ডোজের মধ্যে কোনও তৃতীয় পক্ষের প্রোগ্রাম ছাড়া এটি কী সাধ্য?

যদি এটি স্ট্যান্ডার্ড উইন্ডোজ ইউটিলিটিগুলি (এবং আমি এখানে স্ট্যাক ওভারফ্লো প্রদেশের সীমানা ঘেঁষে) এর সাথে সাধ্যযোগ্য না হয় তবে উইন্ডোজ এপিআই (বা। নেট, যা পাওয়ারশেল!) ফাংশনেও ব্যবহার করা যেতে পারে? হয় কিছু এলোমেলো তৃতীয় পক্ষের প্রোগ্রামের চেয়ে বেশি পছন্দ করা হবে।


superuser.com/a/317062/117590 আশাব্যঞ্জক বলে মনে হচ্ছে, তবে, এটি পছন্দ / প্রয়োজন যে শাটডাউন কমান্ডটি কোনও মন্তব্য ( /c <time>) হিসাবে যোগ করার পরিবর্তিত নয় is
বব

আমি মনে করি একটি ব্যাচের ফাইল লিখতে অসুবিধা হবে না .. সময়ের জন্য প্রম্পট করুন, এবং প্রতি 5 মিনিট বা তারপরে এটি একটি সময়ের সাথে প্রতিক্রিয়া জানাতে পারে, IE "10 মিনিট বাকি" .. এবং যখন এটি 1 এ পৌঁছে যায়, তখন এগুলি গণনা করুন সেকেন্ড বা কিছু।
কাটরেটজম

আমার একটি কাউন্টডাউন দরকার নেই, << এই মুহুর্তে অবশিষ্ট সময় পেতে আমার কিছু পদ্ধতি দরকার। একটি বহিরাগত প্রোগ্রাম দ্বারা শাটডাউন কমান্ড কল করা হচ্ছে।
বব

উত্তর:


5

প্রশ্ন আকর্ষণীয় ছিল তাই আমি ব্যাচ লিখেছি যা আপনার পক্ষে কাজ করতে পারে।

মূলত এটি কাউন্টডাউন টাইমার, আমি অন্তর্ভুক্ত করি নি 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-%%fSpaceorTAB
%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অতিবাহিত / অবশিষ্ট সময় পেতে।


প্রচেষ্টার জন্য আপনাকে সাধুবাদ জানাই। আমি ঠিক বুঝতে পেরেছিলাম যে প্রশ্নটি কীভাবে খারাপভাবে বানানো হয়েছিল তবে আপনি এখনও উত্তরটি দিয়েছিলেন managed কেবলমাত্র এটির জন্য আপনি একটি উপবিষ্ট হন। দুর্ভাগ্যক্রমে, এটি নির্বিচারে শাটডাউন কমান্ডগুলির সাথে কাজ করে না, অর্থাত্ StartTimer.cmdস্পষ্টভাবে বলা উচিত। আমার সমস্যা সমাধানের জন্য আমি একটি ছোট প্রোগ্রাম লিখেছিলাম, যা আমি যখন কম্পিউটারে ফিরে আসি তখন পোস্ট করব।
বব

ঠিক আছে, আমি এই গ্রহণ করব। আমি একটি সি # প্রোগ্রাম লিখে শেষ করেছি shutdown.exeযার নাম ছিল , যা ডাকা হয়েছিল shutdown_original.exe। এটি /tপতাকাটির জন্য যাচাই করে এবং যদি এটি বিদ্যমান থাকে তবে শুরু এবং শেষ সময়গুলি সংরক্ষণ করে একটি ফাইল তৈরি করুন। বার ( /retrieveপতাকা) পুনরুদ্ধার করার সময় এটি টাইমার শুরু হওয়ার পরে কোনও স্টার্টআপ বা বিসর্জন ঘটেছিল কিনা তা দেখার জন্য ইভেন্টের লগটি পরীক্ষা করে। আমি নিশ্চিত না কীভাবে এটি হাইবারনেস পরিচালনা করবে। আমি কোড বা প্রোগ্রাম পোস্ট করতে যাচ্ছি না: এটি একটি বগি ঝামেলা। এবং প্রোগ্রামটি কাজ করতে, আমাকে সুরক্ষা সেটিংসের সাথে প্রচুর গোলমাল করতে হয়েছিল, যা আমি প্রচার করতে চাই না।
বব

মৌলিক ধারণাটি shutdown.exeকলটিকে বাধা দেওয়া এবং একটি ফাইলটিতে সময়গুলি লগ করা ছিল যা আপনি যা করেছিলেন তা কেন এবং আমি কেন এটি গ্রহণ করছি।
বব

2
@ Bob - আপনি ফিরে আসার পরে আপনি আপনার প্রোগ্রাম সম্পর্কে পোস্ট করতে যাচ্ছিলেন? উদাহরণ / উত্স কোডের লিঙ্কগুলি?
অ্যালেক্স এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.