উইন্ডোজ কমান্ড লাইনে একটি আদেশের কার্যকর করার সময়টি কীভাবে পরিমাপ করব?


উত্তর:


113

যদি আপনি উইন্ডোজ 2003 ব্যবহার করেন (তবে মনে রাখবেন উইন্ডোজ সার্ভার ২০০৮ এবং পরবর্তীকালে সমর্থিত নয়) আপনি উইন্ডোজ সার্ভার 2003 রিসোর্স কিটটি ব্যবহার করতে পারেন, এতে টাইমিট.এক্সি রয়েছে যা বিশদ এক্সিকিউশনের পরিসংখ্যান প্রদর্শন করে। "টাইমাইট -?" কমান্ডটি নির্ধারণের জন্য এখানে একটি উদাহরণ রয়েছে:

C:\>timeit timeit -?
Invalid switch -?
Usage: TIMEIT [-f filename] [-a] [-c] [-i] [-d] [-s] [-t] [-k keyname | -r keyname] [-m mask] [commandline...]
where:        -f specifies the name of the database file where TIMEIT
                 keeps a history of previous timings.  Default is .\timeit.dat
              -k specifies the keyname to use for this timing run
              -r specifies the keyname to remove from the database.  If
                 keyname is followed by a comma and a number then it will
                 remove the slowest (positive number) or fastest (negative)
                 times for that keyname.
              -a specifies that timeit should display average of all timings
                 for the specified key.
              -i specifies to ignore non-zero return codes from program
              -d specifies to show detail for average
              -s specifies to suppress system wide counters
              -t specifies to tabular output
              -c specifies to force a resort of the data base
              -m specifies the processor affinity mask

Version Number:   Windows NT 5.2 (Build 3790)
Exit Time:        7:38 am, Wednesday, April 15 2009
Elapsed Time:     0:00:00.000
Process Time:     0:00:00.015
System Calls:     731
Context Switches: 299
Page Faults:      515
Bytes Read:       0
Bytes Written:    0
Bytes Other:      298

আপনি উইন্ডোজ 2003 রিসোর্স কিটে টাইমআইটি পেতে পারেন। এটি এখানে ডাউনলোড করুন


7
এই কিটটিতে উইন্ডোজ 2008 64 বিট নিয়ে সমস্যা রয়েছে এবং 2008 আর 2
আর্টেম

কার্নেল সময় এবং / অথবা স্প্যানড সাব প্রসেসগুলি দ্বারা ব্যবহৃত সময়ও মাপার কোনও উপায় আছে?
রজারডপ্যাক

38
এফওয়াইআই - আমার মনে হয় না উইন্ডোজ 7 64-বিটে টাইমিট কাজ করে। আপনি ভুল পান মেজার-কমান্ড "Casey.K মত দাড়ায়:" (c0000004) ক্যোয়ারী সিস্টেমের কর্মক্ষমতা তথ্য করতে অক্ষম পরিবর্তে, PowerShell এর ব্যবহার করুন। " Stackoverflow.com/questions/673523/...
মাইকেল লা Voie

6
উইন্ডোজ 7-এ আমি দেখতে পাই "'টাইমিট' কোনও অভ্যন্তরীণ বা বাহ্যিক কমান্ড, অপারেবল প্রোগ্রাম বা ব্যাচ ফাইল হিসাবে স্বীকৃত নয়।"
কর্নেল আতঙ্ক

3
উইন্ডোজ 10-এ আমি কমান্ডটি দেখতে পাচ্ছি না বা আমি খুব সহজেই উইন 10 এর জন্য কোনও রিসোর্স কিটটি খুঁজে পাচ্ছি না 10 কেউ কীভাবে এটি পেতে হয় তা কি কেউ জানেন?
জে ইমারম্যান

469

বিকল্পভাবে, উইন্ডোজ পাওয়ারশেলের একটি বিল্ট ইন কমান্ড রয়েছে যা বাশের "সময়" কমান্ডের অনুরূপ। একে "পরিমাপ-আদেশ" বলা হয়। আপনাকে নিশ্চিত করতে হবে যে চালানো মেশিনে পাওয়ারশেল ইনস্টল করা আছে।

উদাহরণ ইনপুট:

Measure-Command {echo hi}

উদাহরণ আউটপুট:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 1318
TotalDays         : 1.52546296296296E-09
TotalHours        : 3.66111111111111E-08
TotalMinutes      : 2.19666666666667E-06
TotalSeconds      : 0.0001318
TotalMilliseconds : 0.1318

21
উইন্ডোজ users ব্যবহারকারীদের জন্য এটিই সেরা সমাধান কারণ সময়সূচী.অ্যাক্সেস উইন্ডোজ 7 সমর্থন করে না বলে মনে হচ্ছে
মাইকেল লা

14
আপনি যদি অভ্যন্তরীণ ডস কমান্ড ব্যবহার করতে চান (যেমন: দির, ইকো, ডেল ইত্যাদি) "সেমিডি / সি" sertোকাতে ভুলবেন না: পরিমাপ-কমান্ড Command সেমিডি / সি দির / এসসি: \ উইন্ডোজ> নুল}
লাইটকিনেস

7
আপনি একটি মাপকাঠিতে থাকেন .exeবর্তমান ডিরেক্টরির মধ্যে, এই ব্যবহার করুন: Measure-Command { .\your.exe }। পাওয়ারশেল স্পষ্টত না বলা অবধি জিনিসগুলি চালায় না pwd
ক্রিশ্চিয়ান ডায়াকোনস্কু

13
বিরক্তিকরভাবে এটি লুকিয়ে আছে যদিও।
জিতরেক্স

13
এটি 'বাশের সময় কমান্ডের অনুরূপ' কোনও সরঞ্জাম নয় । যদিও এটি জানা ভাল ... তবে: এটি কার্যকর হয় না এবং কোঁকড়া বন্ধনীতে আবদ্ধ কমান্ডের ফলাফলগুলিতে ফিরে আসে না ! <stdout>
কর্ট ফেফিল

286

তুমি যদি চাও

  1. মৃত্যুদন্ড কার্যকর করার সময়টিকে এক সেকেন্ডের শততম পর্যন্ত হ্রাস করতে (hh: মিমি: ss.ff ফর্ম্যাট)
  2. কোনও রিসোর্স প্যাকটি ডাউনলোড এবং ইনস্টল করতে হবে না
  3. বিশাল ডস নার্দের মতো দেখতে (কে না)

নিম্নলিখিত স্ক্রিপ্টটি একটি নতুন ব্যাচের ফাইলে অনুলিপি করার চেষ্টা করুন (যেমন: টাইমসিমিডি.বাট ):

@echo off
@setlocal

set start=%time%

:: Runs your command
cmd /c %*

set end=%time%
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100

set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%

:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

ব্যবহার

আপনি যদি আপনার পথের একটি ডিরেক্টরিতে টাইমসিএমডি.বাট রাখেন তবে আপনি এখান থেকে যে কোনও জায়গা থেকে কল করতে পারেন:

timecmd [your command]

যেমন

C:\>timecmd pause
Press any key to continue . . .
command took 0:0:1.18

আপনি যদি আউটপুট পুনর্নির্দেশ করতে চান, আপনি কমান্ডটি এইভাবে উদ্ধৃত করতে পারেন:

timecmd "dir c:\windows /s > nul"

এটি মধ্যরাতের আগের থেকে শুরু হওয়া কমান্ডগুলি পরিচালনা করতে পারে তবে আপনার কমান্ডটি 24 ঘন্টা বা তার বেশি সময় চললে আউটপুটটি ভুল হবে।


9
প্রতিস্থাপন করুন cmd / C% * সঙ্গে % * কাজ যদি না আপনার আদেশ অন্য ব্যাচ ফাইল। তারপর আপনাকে যা করতে হবে চাই other.bat timecmd কল
জেসি Chisholm

2
উইন্ডোজ ৮-তে জেসি চিশলম (এবং আমি উইন্ডোজ in-তেও পড়েছি) আপনার জন্য .bat
ব্রায়ান জে

4
কিছু কারণে এটি কেবল পুরো সেকেন্ডে আমাকে আউটপুট দেয় ... যা আমার পক্ষে অকেজো। আমি বুঝি যে আমি দৌড়াচ্ছি timecmd pauseএবং এর ফলাফল সর্বদা 1.00 সেকেন্ড, 2.00 সেকেন্ড, 4.00 সেকেন্ড ... এমনকি 0.00 সেকেন্ডে হয়! উইন্ডোজ 7.
ক্যামিলো মার্টিন

9
@ ক্যামিলোমার্টিন এবং অন্যেরা যাদের কাছে এটি ছিল (আমার মতো) - আপনার একটি লোকেল থাকতে পারে, যা দশমিকের জন্য ডটের পরিবর্তে COMMA ব্যবহার করে। সুতরাং, এই স্ক্রিপ্টে, এতে পরিবর্তন delims=:.করুন delims=:.,এবং তারপরে এটি "বোর্ড জুড়ে" কাজ করা উচিত।
টমাসজ গ্যান্ডার

5
সেই স্ক্রিপ্টে একটি মারাত্মক পাটিগণিত ত্রুটি রয়েছে: এটি দিয়ে চেষ্টা করুন: set start=10:10:10.10 set end=10:11:10.09এবং এটি আউটপুট দেবে: command took 0:1:-1.99 (59.99s total) আপনার 4 টি লাইনের ক্রমকে বিপরীত করা উচিত যা "lss 0" তুলনা করে, যাতে ক্যারিটি কম থেকে উচ্চ লিঙ্গসিমাল অঙ্কগুলিতে সঠিকভাবে অগ্রসর হয়। তারপরে আউটপুটটি হয়ে যায়: command took 0:0:59.99 (59.99s total)
জিন-ফ্রান্সোইস লার্ভয়ের

230

হেই, সবচেয়ে সহজ সমাধানটি এটি হতে পারে:

echo %time%
YourApp.exe
echo %time%

এটি বাক্সের বাইরে প্রতিটি উইন্ডোজে কাজ করে।


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

set startTime=%time%
YourApp.exe
echo Start Time: %startTime%
echo Finish Time: %time%

163
তুমি কি পাগল?! এর মধ্যে আপনার মস্তিস্কে গণিত করা জড়িত। এই কারণেই আমরা কম্পিউটারগুলি আবিষ্কার করেছিলাম, তাই আমরা এ জাতীয় জিনিসগুলি এড়াতে পারি।
লুক স্যাম্পসন

1
উজ্জ্বল! যদিও, সিপিইউ সময়ের জন্য এটি সত্যই সহায়তা করে না
এলিয়াহ সাউনকাইন

10
আরও ভাল (যদি আপনার অ্যাপ্লিকেশনটি কনসোলে আউটপুট ছিটায়): set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time% (দুঃখিত, মন্তব্যে নতুন লাইন পেতে পারেনি)
জোনো

1
@ লুকস্যাম্পসন, আপনি ব্যবহার করতে পারেন set;-)ওহ অপেক্ষা করুন, কিছুই নয়, আপনি ইতিমধ্যে নীচে এটি করেছেন।
সিনিটেক

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

102

শুধু একটি সামান্য সম্প্রসারণ Casey.K থেকে উত্তর ব্যবহার সম্পর্কে Measure-Commandথেকে PowerShell :

  1. আপনি স্ট্যান্ডার্ড কমান্ড প্রম্পট থেকে পাওয়ারশেলটি অনুরোধ করতে পারেন:

    powershell -Command "Measure-Command {echo hi}"
    
  2. এটি স্ট্যান্ডার্ড আউটপুট খাবে, তবে আপনি | Out-Defaultপাওয়ারশেল থেকে এটি যুক্ত করে এটি প্রতিরোধ করতে পারেন :

    Measure-Command {echo hi | Out-Default}
    

    অথবা কমান্ড প্রম্পট থেকে:

    powershell -Command "Measure-Command {echo hi | Out-Default}"
    

অবশ্যই, আপনি এটিকে কোনও স্ক্রিপ্ট ফাইলে মোড়ানোতে মুক্ত *.ps1 বা*.bat


1
আমরা যে কমান্ডটি পরিমাপ করতে চাইছি তার উদ্ধৃতি থাকলে কী হবে? এই ক্ষেত্রে এটি কি .bat স্ক্রিপ্টে রূপান্তর করা যেতে পারে? উদাহরণস্বরূপmeasureTime.bat "c:\program files\some dir\program.exe"
getFree

53

উইন্ডোজ সার্ভার ২০০৮ আর 2 এ আমি যে ওয়ান লাইনারটি ব্যবহার করি তা হ'ল:

cmd /v:on /c "echo !TIME! & *mycommand* & echo !TIME!"

যতক্ষণ না মাইকম্যান্ডের উক্তিগুলির প্রয়োজন নেই (যা সেন্টিমিডের উদ্ধৃতি প্রক্রিয়াকরণ সহ স্ক্রু)। /v:onকমান্ড সঞ্চালনের একবারে বদলে স্বাধীনভাবে মূল্যায়ন করা দুটি ভিন্ন সময় মানের জন্য অনুমতি দিতে হয়।


এটি "স্প্যাম" ব্যাচগুলির জন্যও কাজ করবে না, যা প্রথমবারের লেবেলটিকে ওভাররাইট করে এবং বোঝায় যে আপনি কম্পিউটারটি কম্পিউটারে প্রতিস্থাপন করছেন, যেমন স্ট্যাকওভারফ্লো
ভ্যাল

সাধারণত আপনি ^^"
সেন্টিমিটার

2
আপনি যদি দ্বিতীয় সময়টির জন্য সেন্টিমিটার / ভি: পুনরাবৃত্তি করেন তবে আমাদের মাইকম্যান্ডেও উদ্ধৃতি থাকতে পারে। উদাহরণ: cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
মার্টেন পেনিংস

8
সহজ: echo %time% & *mycommand* & call echo %^time%। আরও দেখুন এই উত্তর
আছিনী

যদি আপনার কমান্ড খুব বেশি পরিমাণে আউটপুট দেয় তবে সম্ভবত এটি আরও সহজ 2 বার করা:cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
ঝাং জিকাই

49

আপনার যদি কমান্ড উইন্ডোটি খোলা থাকে এবং কমান্ডগুলিকে ম্যানুয়ালি কল করে থাকেন তবে আপনি প্রতিটি প্রম্পটে একটি টাইমস্ট্যাম্প প্রদর্শন করতে পারেন, যেমন

prompt $d $t $_$P$G

এটি আপনাকে এরকম কিছু দেয়:

23.03.2009 15:45:50,77

C:\>

আপনার যদি একটি ছোট ব্যাচের স্ক্রিপ্ট থাকে যা আপনার কমান্ডগুলি কার্যকর করে, প্রতিটি কমান্ডের আগে একটি ফাঁকা রেখা রাখুন, যেমন

(খালি লাইন)

myCommand.exe

(পরবর্তী ফাঁকা লাইন)

myCommand2.exe

প্রম্পটে সময় তথ্য দ্বারা আপনি প্রতিটি কমান্ডের কার্যকর করার সময় গণনা করতে পারেন। পরবর্তী বিশ্লেষণের জন্য আউটপুটটি কোনও পাঠ্যপুস্তকে পাইপ করা ভাল হবে:

MyBatchFile.bat > output.txt

3
ভেবেছি প্রম্পট কমান্ডটি ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ জানাতে কয়েক বছর পিছিয়ে যাব। আমি প্রচুর সিএমডি ট্রিকস দেখেছি (বাশ লোকের আরও), কিন্তু এই আমার নজরে পড়ে যায়।
স্টিভ হাওয়ার্ড

একটি শট কমান্ডের জন্য সহজ, মার্জিত, কোনও ইনস্টল এবং কোনও ব্যাচ ফাইল লেখার জন্য নয় এবং ব্যাচের ফাইলের প্রতিটি পদক্ষেপে সময় দিতে পারে।
ম্যাট

26

যেহেতু অন্যরা ফ্রিওয়্যার এবং পাওয়ারশেলের মতো জিনিসগুলি ইনস্টল করার পরামর্শ দিচ্ছেন, আপনি সাইগউইনও ইনস্টল করতে পারেন যা আপনাকে সময়ের মতো অনেকগুলি বেসিক কমান্ডে অ্যাক্সেস দেয় :

abe@abe-PC:~$ time sleep 5

real    0m5.012s
user    0m0.000s
sys 0m0.000s

সাইগউইন কতটা ওভারহেড যুক্ত করেছে তা নিশ্চিত নয়।


41
উইন্ডোজ প্রশ্নের উত্তর দেওয়ার সময়,
সাইগউইনকে

14
তিনি নির্ধারিত করেছেন যে রিসোর্সকিট, টাইমিম, পিটাইম.এক্সি, পাওয়ারশেল এবং অন্যান্য ইউটিলিটি ব্যবহারকারীরা প্রথমে প্রতারণা করতে শুরু করেছেন। অতএব, লেখক আপনার মন্তব্যটি লেখার আগে এটি অনুপযুক্ত করে তুলেছে।
Val,

আমি এটিকেও অগ্রাহ্য করেছি যেহেতু আমি এটির সবচেয়ে সহজ সমাধানটি খুঁজে পেয়েছি যেহেতু ফ্রি প্রোগ্রাম সিএমডারে বাশ অন্তর্ভুক্ত রয়েছে! সেমিডার.এন.এন.টি কেবল মনে রাখবেন যে আপনার যদি বাশের ফাঁকা ফাঁকা জায়গাগুলি দরকার হয় তবে "কোটস" এর পরিবর্তে একটি কালো রঙের স্পেস ব্যবহার করুন the উদাহরণস্বরূপ, সিডি / সি / প্রোগ্রাম
লুক্সেমেল

24

ইউনিক্সের কয়েকটি কার্যকারিতার মতো মার্জিত নয়, তবে একটি সিএমডি ফাইল তৈরি করুন যা দেখতে:

@echo off
time < nul
yourexecutable.exe > c:\temp\output.txt
time < nul
rem on newer windows system you can try time /T

এটি আরম্ভের সময় এবং বন্ধের সময়গুলি প্রদর্শন করবে:

The current time is: 10:31:57.92
Enter the new time:
The current time is: 10:32:05.94
Enter the new time:

2
ধরে নিই যে বিভিন্ন ভাষায় আপনার বহনযোগ্যতার দরকার নেই আপনি "সময় <নুল" পরে একটি সন্ধানকারী "কারেন্ট" বা এর মতো কিছুও রাখতে পারেন (উপায় দ্বারা নুলের দুর্দান্ত ব্যবহার; আমি সবসময় প্রতিধ্বনি ব্যবহার করেছি time | সময়, তবে যে মার্জিত :) হিসাবে দেখায় না। এবং পাঠ্যটি নয়, কেবল সময় নিষ্কাশন করতে "জন্য" ব্যবহার করুন।
জোয়

2
যদি কমান্ড এক্সটেনশানগুলি সক্ষম করা হয় (এটি হ'ল ডিফল্ট), তবে উইন এক্সপি সংস্করণে timeএকটি /tবিকল্প রয়েছে যা আপনাকে নতুন সময় প্রবেশের অনুরোধ না করে কেবলমাত্র বর্তমান সময়ের সময় প্রদর্শন করে। তবে আপনি যখন এটি করেন এটি কেবল কয়েক ঘন্টা এবং মিনিট প্রদর্শন করে যা কিছু ব্যবহারের পক্ষে যথেষ্ট ভাল নাও হতে পারে। (এই প্রশ্নের জন স্নো এর উত্তর দেখুন।)
মার্টিনিউ

3
time /Tপ্রক্রিয়াটি কয়েক মিনিটের জন্য চালিত হয় কেবল তখনই ব্যবহারযোগ্য! time < nulকুরুচিপূর্ণ তবে আরও সুনির্দিষ্ট।
ফিলিহো

6
আপনি echo %time%যা একই বিন্যাস এবং নির্ভুলতা সরবরাহ করে তা ব্যবহার করতে পারেন time < nulতবে আপনি Enter the new time:আউটপুটটি
এড়ান

স্থানীয়-স্বতন্ত্র amd জন্য আরও সুনির্দিষ্ট সময় ব্যবহারের জন্যwmic os get LocalDateTime
ফুলচলভি

19

আমি "জিএস টাইমার" নামে ফ্রিওয়্যার ব্যবহার করি।

কেবল এই জাতীয় ব্যাচের ফাইল তৈরি করুন:

timer
yourapp.exe
timer /s

আপনার যদি সময়ের একটি সেট প্রয়োজন হয়, কেবল টাইমার / গুলি আউটপুট একটি .txt ফাইলে পাইপ করুন।

আপনি এটি এখানে পেতে পারেন: গ্যামাদ্যিনের ফ্রি ডস ইউটিলিটিস


রেজোলিউশনটি 0.1 সেকেন্ডের।


4
আমি মনে করি না কোনও তৃতীয় পক্ষের অ্যাপ্লিকেশনটি ব্যবহার করা "মানক উপায় সহ" এটি করার জন্য বিবেচিত হতে পারে।
মার্টিনিউ

4
প্রশ্নকারীর অর্থ "অতিরিক্ত সফ্টওয়্যার ইনস্টল না করে", তবে তারপরে (স্বীকৃত) উত্তরের জন্য একটি সম্পূর্ণ উইন্ডোজ 2003 রিসোর্স কিট ইনস্টল করা দরকার! যাইহোক, টাইমরএক্স্সি আমি যা সন্ধান করছিলাম তার জন্য উপযুক্ত ছিল, ধন্যবাদ!
হুগো

1
এটি একটি রোপিত লিঙ্ক। সফটপিডিয়া একটি ক্লিক খামার।
টম এ

@ টম দয়া করে ব্যাখ্যা করুন, "লাগানো লিঙ্ক" বলতে কী বোঝ?
পেপলুয়ান

10
এখানে বিকাশকারীর নিজস্ব পৃষ্ঠায় সরাসরি লিঙ্ক দেওয়া হয়েছে: gammadyne.com/cmdline.htm#timer
হুগো

14

আমি উইন্ডোজ এক্সপি ব্যবহার করছি এবং কোনও কারণে টাইমাইট.এক্সি আমার পক্ষে কাজ করে না। আমি আর একটি বিকল্প পেয়েছি - পিটিটাইম। এটি খুব ভাল কাজ করে।

http://www.pc-tools.net/win32/ptime/

উদাহরণ -

C:\> ptime

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

Syntax: ptime command [arguments ...]

ptime will run the specified command and measure the execution time
(run time) in seconds, accurate to 5 millisecond or better. It is an
automatic process timer, or program timer.


C:\> ptime cd

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

===  cd ===
C:\

Execution time: 0.015 s

উইন্ডোজ 8.1 এও ভাল কাজ করে। আমি আমার নামটি টাইমআরএক্সএই নামকরণ করেছি, কারণ পিটিটাইমের নামটি আমি কখনই মনে করতে পারি না।
ব্রায়ান বার্নস

11

এর রয়েছে TimeMem (মার্চ 2012):

এটি একটি উইন্ডোজ ইউটিলিটি যা কোনও প্রোগ্রাম কার্যকর করে এবং এর প্রয়োগের সময়, মেমরির ব্যবহার এবং আইও পরিসংখ্যান প্রদর্শন করে। এটি ইউনিক্স সময় ইউটিলিটির কার্যকারিতার সাথে একই similar


10

যতক্ষণ না এটি 24 ঘন্টা চেয়ে বেশি স্থায়ী হয় ...

@echo off

set starttime=%TIME%
set startcsec=%STARTTIME:~9,2%
set startsecs=%STARTTIME:~6,2%
set startmins=%STARTTIME:~3,2%
set starthour=%STARTTIME:~0,2%
set /a starttime=(%starthour%*60*60*100)+(%startmins%*60*100)+(%startsecs%*100)+(%startcsec%)

:TimeThis
ping localhost 

set endtime=%time%
set endcsec=%endTIME:~9,2%
set endsecs=%endTIME:~6,2%
set endmins=%endTIME:~3,2%
set endhour=%endTIME:~0,2%
if %endhour% LSS %starthour% set /a endhour+=24
set /a endtime=(%endhour%*60*60*100)+(%endmins%*60*100)+(%endsecs%*100)+(%endcsec%)

set /a timetaken= ( %endtime% - %starttime% )
set /a timetakens= %timetaken% / 100
set timetaken=%timetakens%.%timetaken:~-2%

echo.
echo Took: %timetaken% sec.

5
চিত্তাকর্ষক, তবে আমি মনে করি না এটি শুরু বা শেষ সময়ে 08 বা 09 হয় কারণ এগুলি অষ্টাল হিসাবে ব্যাখ্যা করা হয়। আমার উত্তর হ্যান্ডল করে যে :)
লুক সাম্পসন

6

এখানে একটি

পোস্টফিক্স টাইমার সংস্করণ:

ব্যবহারের উদাহরণ:

সময়সীমা 1 | TimeIt.cmd

Execution took  ~969 milliseconds.

এটিকে কিছু সম্পাদক হিসাবে নোটপ্যাড ++ এর মতো করে অনুলিপি করুন এবং এটি টাইমআইটি সিএমডি হিসাবে সংরক্ষণ করুন :

:: --- TimeIt.cmd ----
    @echo off
    setlocal enabledelayedexpansion

    call :ShowHelp

    :: Set pipeline initialization time
    set t1=%time%

    :: Wait for stdin
    more

    :: Set time at which stdin was ready
    set t2=!time!


    :: Calculate difference
    Call :GetMSeconds Tms1 t1
    Call :GetMSeconds Tms2 t2

    set /a deltaMSecs=%Tms2%-%Tms1%
    echo Execution took ~ %deltaMSecs% milliseconds.

    endlocal
goto :eof

:GetMSeconds
    Call :Parse        TimeAsArgs %2
    Call :CalcMSeconds %1 %TimeAsArgs%

goto :eof

:CalcMSeconds
    set /a %1= (%2 * 3600*1000) + (%3 * 60*1000) + (%4 * 1000) + (%5)
goto :eof

:Parse

    :: Mask time like " 0:23:29,12"
    set %1=!%2: 0=0!

    :: Replace time separators with " "
    set %1=!%1::= !
    set %1=!%1:.= !
    set %1=!%1:,= !

    :: Delete leading zero - so it'll not parsed as octal later
    set %1=!%1: 0= !
goto :eof

:ShowHelp
    echo %~n0 V1.0 [Dez 2015]
    echo.
    echo Usage: ^<Command^> ^| %~nx0
    echo.
    echo Wait for pipe getting ready... :)
    echo  (Press Ctrl+Z ^<Enter^> to Cancel)
goto :eof

^ - 'ড্যানিয়েল স্পার্কস' সংস্করণের উপর ভিত্তি করে


5

সময় পরিমাপের বিকল্প হ'ল "গেট-ডেট"। ফরওয়ার্ডিং আউটপুট ইত্যাদি নিয়ে আপনার কোনও ঝামেলা নেই।

$start = Get-Date
[System.Threading.Thread]::Sleep(1500)
$(Get-Date) - $start

আউটপুট:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 506
Ticks             : 15060003
TotalDays         : 1.74305590277778E-05
TotalHours        : 0.000418333416666667
TotalMinutes      : 0.025100005
TotalSeconds      : 1.5060003
TotalMilliseconds : 1506.0003

এটি আমার জন্য নিখুঁত ছিল
ব্রেট রাউবেরি

4

এটি এমন এক-লাইনার যা বিলম্বিত প্রসারকে এড়িয়ে চলে , যা নির্দিষ্ট আদেশগুলিকে বিরক্ত করতে পারে:

cmd /E /C "prompt $T$$ & echo.%TIME%$ & COMMAND_TO_MEASURE & for %Z in (.) do rem/ "

আউটপুটটি এমন কিছু:

14:30:27.58$
...
14:32:43.17$ rem/ 

দীর্ঘমেয়াদী জন্য পরীক্ষার প্রতিস্থাপন $Tদ্বারা $D, $Tএবং %TIME%দ্বারা %DATE%, %TIME%তারিখ অন্তর্ভূক্ত করে নেয়।

ব্যাচ ফাইলের অভ্যন্তরে এটি ব্যবহার করতে , %Zদ্বারা প্রতিস্থাপন করুন %%Z


হালনাগাদ

এখানে উন্নত ওয়ান-লাইনার ( খুব বেশি দেরি না করেও দেওয়া হয়েছে):

cmd /E /C "prompt $D, $T$$ & (for %# in (.) do rem/ ) & COMMAND_TO_MEASURE & for %# in (.) do prompt"

আউটপুট এটির মতো দেখাচ্ছে:

2015/09/01, 14:30:27.58$ rem/ 
...
2015/09/01, 14:32:43.17$ prompt

এই পদ্ধতির ফলে ফলাফলটিতে কোনও নতুনকে ইনস্ট্যান্স করার প্রক্রিয়া অন্তর্ভুক্ত হয় না cmdবা এটি promptকমান্ড (গুলি )ও অন্তর্ভুক্ত করে না ।


4

আপনি যে উইন্ডোজ ব্যবহার করছেন তার উপর নির্ভর করে, কেবল চালানো bashআপনাকে বাশ মোডে রাখবে। এটি আপনাকে গুচ্ছ কমান্ডগুলি ব্যবহার করার অনুমতি দেবে যা সরাসরি পাওয়ারশেলের উপর উপলভ্য নয় ( timeকমান্ডের মতো )। আপনার কমান্ডের সময় নির্বাহ করা এখন কার্যকর হিসাবে সহজ:

# The clause <your-command> (without the angle brackets) denotes the command you want to run.
$ time <your-command>

দ্রষ্টব্য: আপনি সহজেই ব্যাশ মোড থেকে প্রস্থান করতে পারেন এবং বাশ মোডে চলার exitপরে আপনার মূলধারার শেলটিতে ফিরে আসতে পারেন ।

এটি আমার জন্য অন্যান্য পদ্ধতি (যেমন Measure-Command) কখনও কখনও অনাকাঙ্ক্ষিত পরিসংখ্যান তৈরির চেষ্টা করার পরে পুরোপুরি (উইন্ডোজ 10) কাজ করে । আশা করি এটি আপনার পক্ষেও কাজ করে।


2
উইন্ডোজ 10 1607 হিসাবে সেরা উত্তর।
CarpeDiemKopi

2

যদি অন্য কেউ এই প্রশ্নের উত্তর খুঁজতে আসে, তবে উইন্ডোজ এপিআই ফাংশন বলে GetProcessTimes()। এটি একটি সামান্য সি প্রোগ্রাম লিখতে খুব বেশি কাজ বলে মনে হচ্ছে না যা কমান্ডটি শুরু করবে, এই কল করবে এবং প্রক্রিয়াটির সময়টি ফিরিয়ে দেবে।


3
সামান্য সি প্রোগ্রাম ডাউনলোড করা খুব বেশি কাজের মতো মনে হচ্ছে না যা কমান্ডটি শুরু করবে, এই কলটি করবে (এবং আরও অনেক অগ্রিম পরিমাপ করবে), এবং প্রক্রিয়াটির সময়টি ফিরিয়ে দেবে।
এলাজার লাইবোভিচ

@ ইলজারলিবুভিচ পাওয়ারশেল? আপনি এটি সি # থেকে কল করতে পারেন।
কীউইউএসআর


2

এই একটি মন্তব্য / লুক স্যাম্পসন এর চমৎকার সম্পাদনা হয় timecmd.batএবং তার উত্তর দেন

কিছু কারণে এটি কেবল পুরো সেকেন্ডে আমাকে আউটপুট দেয় ... যা আমার পক্ষে অকেজো। মানে আমি টাইম সিএমডি বিরতি দিয়েছি, এবং এর ফলাফল সর্বদা 1.00 সেকেন্ড, 2.00 সেকেন্ড, 4.00 সেকেন্ড ... এমনকি 0.00 সেকেন্ডে হয়! উইন্ডোজ 7. - ক্যামিলো মার্টিন 25 সেপ্টেম্বর '13 এ 16:00 "

কিছু কনফিগারেশনে ডিলিমিটর আলাদা হতে পারে। নিম্নলিখিত পরিবর্তনটি কমপক্ষে পশ্চিমা দেশগুলিকে অন্তর্ভুক্ত করা উচিত।

set options="tokens=1-4 delims=:,." (added comma)

দ্য %time%মিলিসেকেন্ড যে যোগ করার পরে আমার সিস্টেম কাজ ','

(* কারণ সাইটটি অনন মন্তব্যের অনুমতি দেয় না এবং পরিচয়ের ভাল ট্র্যাক রাখে না যদিও আমি সর্বদা একই অতিথি ইমেল ব্যবহার করি যা আইপিভি 6 আইপি এবং ব্রাউজারের ফিঙ্গারপ্রিন্টের সাথে মিলিত পাসওয়ার্ড ছাড়াই স্বতন্ত্রভাবে চিহ্নিত করার জন্য যথেষ্ট)


আপনার উত্তরটি স্ক্রোল করার আগে আমি ঠিক সেই মন্তব্য করেছি। যাইহোক, লুকের স্ক্রিপ্টটি শূন্য-প্যাড ঘন্টা, মিনিট এবং সেকেন্ডের মধ্যে থাকতে পারে, কেবলমাত্র সাবসেকেন্ডগুলি (যা সেন্টিসেকেন্ড নয় , এবং মিলিসেকেন্ড নয়, বিটিডাব্লু )। : এখানে দেখুন en.wiktionary.org/wiki/centisecond
Tomasz Gandor

2

এখানে আমার পদ্ধতি, কোনও রূপান্তর এবং কোনও এমএস নেই। এনকোডিং সময়কাল নির্ধারণে এটি কার্যকর (যদিও ২৪ ঘন্টা সীমাবদ্ধ):

@echo off

:start
REM Start time storage
set ST=%time%
echo Process started at %ST%
echo.
echo.

REM Your commands
REM Your commands
REM Your commands

:end
REM Start Time Definition
for /f "tokens=1-3 delims=:" %%a in ("%ST%") do set /a h1=%%a & set /a m1=%%b & set /a s1=%%c

REM End Time Definition
for /f "tokens=1-3 delims=:" %%a in ("%TIME%") do set /a h2=%%a & set /a m2=%%b & set /a s2=%%c

REM Difference
set /a h3=%h2%-%h1% & set /a m3=%m2%-%m1% & set /a s3=%s2%-%s1%

REM Time Adjustment
if %h3% LSS 0 set /a h3=%h3%+24
if %m3% LSS 0 set /a m3=%m3%+60 & set /a h3=%h3%-1
if %s3% LSS 0 set /a s3=%s3%+60 & set /a m3=%m3%-1

echo Start    :    %ST%
echo End    :    %time%
echo.
echo Total    :    %h3%:%m3%:%s3%
echo.
pause

1
@echo off & setlocal

set start=%time%

REM Do stuff to be timed here.
REM Alternatively, uncomment the line below to be able to
REM pass in the command to be timed when running this script.
REM cmd /c %*

set end=%time%

REM Calculate time taken in seconds, to the hundredth of a second.
REM Assumes start time and end time will be on the same day.

set options="tokens=1-4 delims=:."

for /f %options% %%a in ("%start%") do (
    set /a start_s="(100%%a %% 100)*3600 + (100%%b %% 100)*60 + (100%%c %% 100)"
    set /a start_hs=100%%d %% 100
)

for /f %options% %%a in ("%end%") do (
    set /a end_s="(100%%a %% 100)*3600 + (100%%b %% 100)*60 + (100%%c %% 100)"
    set /a end_hs=100%%d %% 100
)

set /a s=%end_s%-%start_s%
set /a hs=%end_hs%-%start_hs%

if %hs% lss 0 (
    set /a s=%s%-1
    set /a hs=100%hs%
)
if 1%hs% lss 100 set hs=0%hs%

echo.
echo  Time taken: %s%.%hs% secs
echo.

কাজ করে না. প্রাপ্তি: ভারসাম্যহীন প্রথম বন্ধনী। ভারসাম্যহীন প্রথম বন্ধনী। অনুপস্থিত।
রিচার্ড সানডোজ

@ রিচার্ডসানডোজ এটি দুর্দান্ত কাজ করে, ভারসাম্যহীন কোনও প্রথম বন্ধনী নেই। কিভাবে আপনি এটি ব্যবহার করা হয়?
মাইকম

1

নিম্নলিখিত স্ক্রিপ্টটি কেবল "সেমিডি.এক্সি" ব্যবহার করে এবং স্ক্রিপ্টের পূর্ববর্তী প্রক্রিয়াটি প্রস্থান হওয়ার সময় থেকে পাইপলাইন তৈরি হওয়ার সময় থেকে মিলিসেকেন্ডের সংখ্যা আউটপুট করে। যেমন, আপনার কমান্ডটি টাইপ করুন এবং স্ক্রিপ্টটিতে পাইপ করুন। উদাহরণ: "টাইমআউট 3 | রানটাইম.কোমডি" "2990." এর মতো কিছু পাওয়া উচিত " আপনার যদি রানটাইম আউটপুট এবং স্টিডিন আউটপুট উভয়েরই প্রয়োজন হয় তবে পাইপের আগে স্টিডিন পুনর্নির্দেশ করুন - প্রাক্তন: "dir / s 1> << টেমপ্লেট | রানটাইম.কম" "dir" কমান্ডের আউটপুটটিকে "temp.txt" এ ডাম্প করে দেবে এবং কনসোলে রানটাইম মুদ্রণ করবে।

:: --- runtime.cmd ----
@echo off
setlocal enabledelayedexpansion

:: find target for recursive calls
if not "%1"=="" (
    shift /1
    goto :%1
    exit /b
)

:: set pipeline initialization time
set t1=%time%

:: wait for stdin
more > nul

:: set time at which stdin was ready
set t2=!time!

::parse t1
set t1=!t1::= !
set t1=!t1:.= !
set t1=!t1: 0= !

:: parse t2
set t2=!t2::= !
set t2=!t2:.= !
set t2=!t2: 0= !

:: calc difference
pushd %~dp0
for /f %%i in ('%0 calc !t1!') do for /f %%j in ('%0 calc !t2!') do (
    set /a t=%%j-%%i
    echo !t!
)
popd
exit /b
goto :eof

:calc
set /a t=(%1*(3600*1000))+(%2*(60*1000))+(%3*1000)+(%4)
echo !t!
goto :eof

endlocal

ভাল স্ক্রিপ্ট পুনরাবৃত্তি কল করার পরিবর্তে , এটি এইভাবে বিবেচনা call :calc। আমি এখানে এটি করেছি। লিঙ্ক কোড কিছু ভাল এই উপায় পেতে। : ডি
নাদু

বাগ # 1 12' ঘন্টা এ ব্যর্থ হবে। উদাহরণ: " 0 : 23: 19,42" বাগ # 2 দশমিক বিন্দু ছাড়া অন্য কিছু হলে ব্যর্থ হবে। একই উদাহরণ: "0:23:19 , 42" এখানে দশমিক পয়েন্টটি হল, <__________> 'সম্পাদনা অনুমোদনের কমিশনে' যে বোবা **** এটি প্রত্যাখ্যান করেছে তা ভাল করার চেষ্টা করেছে - 5 টির মধ্যে 3 টি ভোট দিয়েছে "এই সম্পাদনাটিও পরিবর্তন হয় অনেক লেখক মূল অভিপ্রায়। " সুতরাং যদি আপনার ভাগ্য সম্পাদনার চেষ্টা করার মতো মনে হয় বা বাগগুলি ঠিক রেখে দিন - তাই 'লেখকগণের মূল উদ্দেশ্যটি অক্ষত থাকে'। ফেসপাল
নাদু

যখন আপনার ঘড়ির রেজোলিউশন সবে সজ্জায় 1/100 দ্বিতীয় রেজোলিউশনে সক্ষম হয় তখন মিলিসেকেন্ডগুলি আউটপুট করতে পারে না।
jwdonahue

1

ড্রিবিওর উত্তরটি আরও ছোট করা যায় (যদিও খুব বেশি পাঠযোগ্য নয়)

@echo off

:: Calculate the start timestamp
set _time=%time%
set /a _hours=100%_time:~0,2%%%100,_min=100%_time:~3,2%%%100,_sec=100%_time:~6,2%%%100,_cs=%_time:~9,2%
set /a _started=_hours*60*60*100+_min*60*100+_sec*100+_cs


:: yourCommandHere


:: Calculate the difference in cSeconds
set _time=%time%
set /a _hours=100%_time:~0,2%%%100,_min=100%_time:~3,2%%%100,_sec=100%_time:~6,2%%%100,_cs=%_time:~9,2%
set /a _duration=_hours*60*60*100+_min*60*100+_sec*100+_cs-_started

:: Populate variables for rendering (100+ needed for padding)
set /a _hours=_duration/60/60/100,_min=100+_duration/60/100%%60,_sec=100+(_duration/100%%60%%60),_cs=100+_duration%%100

echo Done at: %_time% took : %_hours%:%_min:~-2%:%_sec:~-2%.%_cs:~-2%

::prints something like:
::Done at: 12:37:53,70 took: 0:02:03.55

করার মন্তব্য লুক স্যাম্পসন এই সংস্করণে অকট্যাল নিরাপদ যদিও কাজের 24 ঘন্টার মধ্যে সম্পন্ন করা উচিত।


কাজ করে না. একক অঙ্কের সময় যখন অপারেটর নিখোঁজ।
রিচার্ড সানডোজ

set _time=%time: =0%একক অঙ্কের সমস্যার সমাধান করে - উভয় জায়গায় প্রতিস্থাপন করুন।
লর

1
  1. আপনার প্রোগ্রামটি যে ডিরেক্টরিতে রয়েছে সেখানে টাইপ করুন notepad mytimer.bat, নতুন ফাইল তৈরি করতে 'হ্যাঁ' ক্লিক করুন।

  2. YourApp.exeআপনার প্রোগ্রামের পরিবর্তে নীচের কোডটি আটকান , তারপরে সংরক্ষণ করুন।

    @echo off
    date /t
    time /t
    YourApp.exe
    date /t
    time /t
  3. mytimer.batকমান্ড লাইনে টাইপ করুন এবং তারপরে এন্টার টিপুন।


7
সময় / টি কেবল আপনাকে এইচএইচ: এমএম এ সময় দেয়। কার্যকর করার সময়, আপনার সাধারণত আরও নির্ভুলতার প্রয়োজন হয় ... আপনি কি সেকেন্ডের ভগ্নাংশে নামতে সেটআপ করতে পারেন? আমি জন ডাব্লু (সময় <নুল) থেকে সলিউশন পরীক্ষা করেছি এবং এটি আসলে সময়টি 1/100 এর চেয়ে কম করে দেয়: এইচ এইচ: এমএম: এসএস.এক্সএক্স
অবাক

1

আমার কোডটি আপনাকে 24 ঘন্টা পর্যন্ত মিলি সেকেন্ডে চলমান সময় দেয়, এটি স্থানীয়ভাবে সংবেদনশীল এবং যদি মধ্যরাত জুড়ে কোড চলতে থাকে তবে এটি নেতিবাচক মানগুলির জন্য অ্যাকাউন্ট করে। এটি বিলম্বিত সম্প্রসারণ ব্যবহার করে এবং এটি একটি সেমিডি / ব্যাট ফাইলে সংরক্ষণ করা উচিত।

আপনার কোড আগে:

SETLOCAL EnableDelayedExpansion

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set t=%%I
set /a t1 = %t:~8,1%*36000 + %t:~9,1%*3600 + %t:~10,1%*600 + %t:~11,1%*60 + %t:~12,1%*10 + %t:~13,1% && set t1=!t1!%t:~15,3%

আপনার কোড পরে:

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set t=%%I
set /a t2 = %t:~8,1%*36000 + %t:~9,1%*3600 + %t:~10,1%*600 + %t:~11,1%*60 + %t:~12,1%*10 + %t:~13,1% && set t2=!t2!%t:~15,3%
set /a t2-=t1 && if !t2! lss 0 set /a t2+=24*3600000

আপনি যদি এইচএইচ: মিমি: এসএস 1000 ফর্ম্যাটে চলমান সময় চান তবে যুক্ত করুন:

set /a "h=t2/3600000,t2%%=3600000,m=t2/60000,t2%%=60000" && set t2=00000!t2!&& set t2=!t2:~-5!
if %h% leq 9 (set h=0%h%) && if %m% leq 9 (set m=0%m%)
set t2=%h%:%m%:%t2:~0,2%.%t2:~2,3%

ENDLOCAL

ভেরিয়েবল t2আপনার চলমান সময়কে ধরে রাখে, আপনি echo %t2%এটি প্রদর্শন করতে পারেন ।


1

পার্ল হায়ার সলিউশন উপলভ্য করে ইনস্টল করে চালান:

C:\BATCH>time.pl "echo Fine result"
0.01063
Fine result

STDERR পরিমাপ করা সেকেন্ডের আগে আসে

#!/usr/bin/perl -w

use Time::HiRes qw();
my $T0 = [ Time::HiRes::gettimeofday ];

my $stdout = `@ARGV`;

my $time_elapsed = Time::HiRes::tv_interval( $T0 );

print $time_elapsed, "\n";
print $stdout;

0

সেকেন্ডের শততম সময়ে সময় ফেরানোর জন্য একটি উপ ব্যবহার করে

::tiemeit.cmd
@echo off
Setlocal EnableDelayedExpansion

call :clock 

::call your_command  or more > null to pipe this batch after your_command

call :clock

echo %timed%
pause
goto:eof

:clock
if not defined timed set timed=0
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do ( 
set /A timed = "(((1%%a - 100) * 60 + (1%%b - 100)) * 60 + (1%%c - 100))  * 100 + (1%%d - 100)- %timed%"
)
goto:eof

0

আঞ্চলিক ফর্ম্যাট, 24 ঘন্টা এবং মিশ্র ইনপুট সহ "লিন অ্যান্ড মিন" টিমারের সাহায্যে আচিনির প্রতিস্থাপন পদ্ধতির বডিটি
মানিয়ে নেওয়া , কোনও আইএফের নেই, কেবলমাত্র একটির জন্য (আমার আঞ্চলিক স্থিরতা )

1: ফাইল টাইমআরবাট কোথাও% PATH% বা বর্তমান ডিয়ারে স্থাপন করা হয়েছে

@echo off & rem :AveYo: compact timer function with Regional format, 24-hours and mixed input support
if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
(if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
set "TE=!timer_end:%DE%=%%100)*100+1!"     & set "TS=!timer_set:%DS%=%%100)*100+1!"
set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof

ব্যবহার:
টাইমার এবং ইকো স্টার্ট_সিএমডি এবং টাইমআউট / টি 3 এবং ইকো শেষ_সিএমডিএস এবং টাইমার
টাইমারটাইমার "23: 23: 23,00"
টাইমার "23: 23: 23,00" এবং টাইমার
টাইমার "13.23.23,00" & টাইমার "03: 03: 03.00"
টাইমারটাইমার "0: 00: 00.00" না & সেমিডি / ভি: অন / সি মধ্যরাত পর্যন্ত প্রতিধ্বনি =! টাইমার_েন্ড!
ইনপুট এখন মিশ্রিত করা যায়, অসম্ভাব্যদের জন্য, তবে কার্যকর সময় চলাকালীন সময় ফর্ম্যাট পরিবর্তিত হয়

2: ফাংশন : টাইমার ব্যাচ স্ক্রিপ্টের সাথে বান্ডিল হয়েছে (নীচের নমুনার ব্যবহার):

@echo off
set "TIMER=call :timer" & rem short macro
echo.
echo EXAMPLE:
call :timer
timeout /t 3 >nul & rem Any process here..
call :timer
echo.
echo SHORT MACRO:
%TIMER% & timeout /t 1 & %TIMER% 
echo.
echo TEST INPUT:
set "start=22:04:04.58"
set "end=04.22.44,22"
echo %start% ~ start & echo %end% ~ end
call :timer "%start%"
call :timer "%end%"
echo.
%TIMER% & %TIMER% "00:00:00.00" no 
echo UNTIL MIDNIGHT: %timer_end%
echo.
pause 
exit /b

:: এটি পরীক্ষা করার জন্য, কোড বিভাগের উপরে এবং নীচে উভয়ই অনুলিপি করুন

rem :AveYo: compact timer function with Regional format, 24-hours and mixed input support 
:timer Usage " call :timer [input - optional] [no - optional]" :i Result printed on second call, saved to timer_end 
if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
(if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
set "TE=!timer_end:%DE%=%%100)*100+1!"     & set "TS=!timer_set:%DS%=%%100)*100+1!"
set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof

সিই, ডিই এবং সিএস, ডিএস কোলন এন্ড, ডট এন্ড এবং কোলন সেট, ডট সেট - মিশ্র বিন্যাস সমর্থনের জন্য ব্যবহৃত হয়


0

নিম্নলিখিত স্ক্রিপ্টটি * নিক্স যুগের সময়কে অনুকরণ করে তবে এটি স্থানীয় এবং আঞ্চলিক। এটি লিপ বছর সহ ক্যালেন্ডার প্রান্ত মামলাগুলি পরিচালনা করা উচিত। তাহলে Cygwin পাওয়া যায়, কাল মান নির্দিষ্ট করে তুলনা করা যেতে পারে Cygwin বিকল্প।

আমি ইএসটিতে আছি এবং রিপোর্ট করা পার্থক্যটি 4 ঘন্টা যা তুলনামূলকভাবে সঠিক। টিজেড এবং আঞ্চলিক নির্ভরতা অপসারণের জন্য কয়েকটি আকর্ষণীয় সমাধান রয়েছে, তবে আমি লক্ষ্য করি না এমন তুচ্ছ কিছু।

@ECHO off
SETLOCAL EnableDelayedExpansion

::
::  Emulates local epoch seconds
::

:: Call passing local date and time
CALL :SECONDS "%DATE%" "%TIME%"
IF !SECONDS! LEQ 0 GOTO END

:: Not testing - print and exit
IF NOT "%~1"=="cygwin" (
    ECHO !SECONDS!
    GOTO END
)

:: Call on Cygwin to get epoch time
FOR /F %%c IN ('C:\cygwin\bin\date +%%s') DO SET EPOCH=%%c

:: Show the results
ECHO Local Seconds: !SECONDS!
ECHO Epoch Seconds: !EPOCH!

:: Calculate difference between script and Cygwin
SET /A HOURS=(!EPOCH!-!SECONDS!)/3600
SET /A FRAC=(!EPOCH!-!SECONDS!)%%3600

:: Delta hours shown reflect TZ
ECHO Delta Hours: !HOURS! Remainder: !FRAC!

GOTO END

:SECONDS
SETLOCAL  EnableDelayedExpansion

    :: Expecting values from caller
    SET DATE=%~1
    SET TIME=%~2

    :: Emulate Unix epoch time without considering TZ
    SET "SINCE_YEAR=1970"

    :: Regional constraint! Expecting date and time in the following formats:
    ::   Sun 03/08/2015   Day MM/DD/YYYY
    ::   20:04:53.64         HH:MM:SS
    SET VALID_DATE=0
    ECHO !DATE! | FINDSTR /R /C:"^... [0-9 ][0-9]/[0-9 ][0-9]/[0-9][0-9][0-9][0-9]" > nul && SET VALID_DATE=1
    SET VALID_TIME=0
    ECHO !TIME! | FINDSTR /R /C:"^[0-9 ][0-9]:[0-9 ][0-9]:[0-9 ][0-9]" > nul && SET VALID_TIME=1
    IF NOT "!VALID_DATE!!VALID_TIME!"=="11" (
        IF !VALID_DATE! EQU 0  ECHO Unsupported Date value: !DATE! 1>&2
        IF !VALID_TIME! EQU 0  ECHO Unsupported Time value: !TIME! 1>&2
        SET SECONDS=0
        GOTO SECONDS_END
    )

    :: Parse values
    SET "YYYY=!DATE:~10,4!"
    SET "MM=!DATE:~4,2!"
    SET "DD=!DATE:~7,2!"
    SET "HH=!TIME:~0,2!"
    SET "NN=!TIME:~3,2!"
    SET "SS=!TIME:~6,2!"
    SET /A YEARS=!YYYY!-!SINCE_YEAR!
    SET /A DAYS=!YEARS!*365

    :: Bump year if after February  - want leading zeroes for this test
    IF "!MM!!DD!" GEQ "0301" SET /A YEARS+=1

    :: Remove leading zeros that can cause octet probs for SET /A
    FOR %%r IN (MM,DD,HH,NN,SS) DO (
        SET "v=%%r"
        SET "t=!%%r!"
        SET /A N=!t:~0,1!0
        IF 0 EQU !N! SET "!v!=!t:~1!"
    )

    :: Increase days according to number of leap years
    SET /A DAYS+=(!YEARS!+3)/4-(!SINCE_YEAR!%%4+3)/4

    :: Increase days by preceding months of current year
    FOR %%n IN (31:1,28:2,31:3,30:4,31:5,30:6,31:7,31:8,30:9,31:10,30:11) DO (
        SET "n=%%n"
        IF !MM! GTR !n:~3! SET /A DAYS+=!n:~0,2!
    )

    :: Multiply and add it all together
    SET /A SECONDS=(!DAYS!+!DD!-1)*86400+!HH!*3600+!NN!*60+!SS!

:SECONDS_END
ENDLOCAL & SET "SECONDS=%SECONDS%"
GOTO :EOF

:END
ENDLOCAL

ডাউনভোট সম্পর্কে কৌতূহল। ধন্যবাদ।
বিভিজে

0

সিএমডি এবং এক এনভির জন্য খাঁটি পিএইচপি ব্যবহার করে একটি সমাধান। পরিবর্তনশীল:

@echo off
setlocal enableextensions

REM set start time env var
FOR /F "tokens=* USEBACKQ" %%F IN (`php -r "echo microtime(true);"`) DO ( SET start_time=%%F )

## PUT_HERE_THE_COMMAND_TO_RUN ##

REM echo elapsed time
php -r "echo 'elapsed: ' . (round(microtime(true) - trim(getenv('start_time')), 2)) . ' seconds' . mb_convert_encoding('&#13;&#10;', 'UTF-8', 'HTML-ENTITIES');"
  • সাইগউইন বা অবিশ্বস্ত ইউটিলিটিগুলির প্রয়োজন নেই। ইউএফফুল যখন পিএইচপি স্থানীয়ভাবে উপলব্ধ থাকে

  • নির্ভুলতা এবং আউটপুট ফর্ম্যাটটি সহজেই টুইট করা যায়

  • একই ধারণা পাওয়ারশেলের জন্য পোর্ট করা যেতে পারে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.