ฉันมักจะใช้
echo.|time & my_command & echo.|time
เมื่อฉันไม่มีอะไรอยู่ในมือ สิ่งนี้ทำให้เกิดผลลัพธ์ดังต่อไปนี้:
> echo. | time & ping -n 4 localhost> nul & echo. | time
เวลาปัจจุบันคือ: 18: 42: 34,63
ป้อนเวลาใหม่:
เวลาปัจจุบันคือ: 18: 42: 37,68
ป้อนเวลาใหม่:
ไม่สวยและสามารถทำให้สวยขึ้นได้โดยไปที่ท่อเพื่อค้นหา:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
หากคุณมีการเปิดใช้งานการขยายล่าช้าตามค่าเริ่มต้น (หรือเริ่ม cmd ด้วย/v:on
อาร์กิวเมนต์) คุณสามารถใช้echo !time!
โดยไม่ต้องเปลี่ยนวิธีแฮ็กที่น่าเกลียดด้วยการเปลี่ยนเส้นทางอินพุต
หากคุณต้องการใช้แบตช์ไฟล์คุณสามารถทำได้ดังนี้:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
ฉันได้เพิ่มการเปลี่ยนเส้นทางไปยัง nul สำหรับทั้ง stdout และ stderr ที่นี่เพราะไม่เช่นนั้นอาจหาจุดเริ่มต้นและจุดสิ้นสุดได้ยาก คุณสามารถลบได้หากไม่เกี่ยวข้องกับคุณ
แต่ทุกวันนี้ฉันใช้TimeThisเป็นส่วนใหญ่ซึ่งตอนนี้ก็ถูกลบไปแล้วเศร้า
PowerShell เสนอวิธีการเช่นกัน:
Measure-Command { my_command }
แต่คุณต้องระวังสิ่งต่าง ๆ ที่ต้องพึ่งพาไดเร็กตอรี่ที่ใช้งานได้ เพื่อให้ทำงานได้อย่างถูกต้องคุณอาจต้องใช้เล่ห์เหลี่ยมเล็กน้อย:
@echo off
setlocal enableextensions
rem Prepare current directory and command line so they
rem can be stuck into a single-quoted PowerShell string.
set "Dir=%CD:'=''%"
set "Cmd=%*"
set "Cmd=%Cmd:'=''%"
rem Prepare command to pass to PowerShell
set Command=
set "Command=&{"
set "Command=%Command% Set-Location '%Dir%'"
set "Command=%Command%; [Environment]::CurrentDirectory = '%Dir%'"
set "Command=%Command%; $start = Get-Date"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host"
set "Command=%Command%; iex 'cmd /c %Cmd%'"
set "Command=%Command%; $end = Get-Date"
set "Command=%Command%; Write-Host"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host (' End time : ' + $end.ToString())"
set "Command=%Command%; Write-Host (' Elapsed time : ' + ($end - $start).ToString())"
set "Command=%Command%; }"
powershell -noprofile -command "%Command%"
endlocal
สิ่งนี้สามารถรันในลักษณะเดียวกับtimethis
ให้แน่ใจว่าได้หลีกเลี่ยงอัญประกาศด้วย\"
ถ้าจำเป็นในบรรทัดคำสั่ง (เหมือนtimethis
กัน) ผลผลิตที่ได้จะคล้ายกัน แม้ว่าการเปลี่ยนเส้นทางจะไม่ทำงาน