Cách dễ nhất để thời gian một công cụ dòng lệnh


9

Cách dễ nhất / nhanh nhất để thời gian một công cụ dòng lệnh là gì?

Nó không phải là siêu chính xác (+/- giây là ổn) vì tôi hy vọng việc này sẽ mất vài phút hoặc thậm chí 1 giờ +. Và viết một tập tin bó cũng tốt. Ngoài ra, không cần phải tính toán đúng hạn, chỉ cần hiển thị thời gian bắt đầu và thời gian kết thúc.


Có thể thuộc về Stackoverflow.
Joey

2
Nếu tôi phải "lập trình" thứ gì đó để làm việc này ... thì giải pháp quá phức tạp. Phải có một số công cụ dòng lệnh hoặc giải pháp lô đơn giản cho việc này, phải không?
slolife

Nhiều khả năng trên Serverfault.
Kirill V. Lyadvinsky

Nói chung, HĐH chỉ quan tâm đến thời gian sử dụng CPU. Câu trả lời của tôi dưới đây sẽ làm những gì bạn muốn. Tôi chỉ sử dụng một tệp nhật ký để lưu trữ thông tin.
Axxmasterr

Câu trả lời:


19

Tôi thường sử dụng

echo.|time & my_command & echo.|time

khi tôi không có gì khác trong tay Điều này gây ra đầu ra như sau:

> echo. | time & ping -n 4 localhost> nul & echo. | time
Thời gian hiện tại là: 18: 42: 34,63
Nhập thời gian mới:
Thời gian hiện tại là: 18: 42: 37,68
Nhập thời gian mới:

Không đẹp và có thể được làm đẹp hơn bằng cách đặt đường ống vào findstr:

echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current

Nếu bạn đã trì hoãn mở rộng được bật theo mặc định (hoặc bắt đầu cmd với /v:ontư cách là đối số), bạn cũng có thể chỉ cần sử dụng echo !time!mà không phải dùng đến các bản hack xấu xí với chuyển hướng đầu vào.

Nếu bạn muốn sử dụng một tệp bó, bạn có thể làm như thế này:

@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%

Tôi đã thêm chuyển hướng vào nul cho cả thiết bị xuất chuẩn và thiết bị xuất chuẩn ở đây, vì nếu không, có thể khó tìm được dòng bắt đầu và kết thúc. Bạn có thể loại bỏ điều này nếu điều này không liên quan đến bạn.

Nhưng ngày nay tôi chủ yếu sử dụng Time This - điều mà bây giờ đã bị xóa, thật đáng buồn.

PowerShell cũng cung cấp một cách:

Measure-Command { my_command }

nhưng bạn cần cẩn thận với những thứ dựa vào thư mục làm việc hoặc chuyển hướng. Để những thứ này hoạt động chính xác, bạn có thể cần một mẹo nhỏ:

@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

Điều này có thể được chạy theo cùng một cách timethis, hãy chắc chắn để thoát dấu ngoặc kép \"nếu chúng cần thiết trong dòng lệnh (cũng timethisnhư vậy). Sản lượng sản xuất là tương tự. Chuyển hướng sẽ không làm việc, mặc dù.


TimeĐây là từ bộ tài nguyên Windows 2000 và không còn khả dụng; vào năm 2003 Bộ tài nguyên là TimeIt, không hoạt động trên Win7 64 bit của tôi. Để biết giải pháp PowerShell, hãy xem superuser.com/questions/228056/ từ
pesche

Đó là hút. Mặc dù vậy, tôi vẫn có khả năng thực thi nằm quanh đây từ thời xưa.
Joey

@pesche: Tôi đã thêm một tệp bó có thể đóng vai trò thay thế thả vào cho timethis.
Joey

4

Bạn có thể sử dụng bộ lập lịch hệ thống để chạy lệnh cho bạn.

Bảng điều khiển -> Nhiệm vụ theo lịch trình -> tạo mới ....

Chỉ cần trỏ tác vụ theo lịch trình vào lệnh bạn muốn chạy và nó sẽ làm những gì bạn muốn.

Nếu bạn muốn tạo một logfile lưu trữ thông tin trạng thái thời gian, bạn có thể muốn xem xét thực hiện một cái gì đó tương tự như tập lệnh ở trên.

Tôi sử dụng một tiện ích gọi là "ngay bây giờ" để làm điều này vì nó sẽ lặp lại ngày và giờ. Điều này rất thuận tiện cho các tập lệnh dòng lệnh mà bạn muốn theo dõi trong các tệp nhật ký nhưng thiếu thông minh để bao gồm một ngày / thời gian nguyên bản. Rất tiện dụng vì nó không quan tâm đến phản hồi và nó sẽ biến mất khi bạn hoàn thành nó.

Bây giờ Utlity có thể được tìm thấy ở đây

Ví dụ về kịch bản sẽ là ...

echo -------------- >>logfile.txt
now Process Starting>> logfile.txt
<commandhere> <target> >> logfile.txt
now process Ending >> logfile.txt
echo -------------- >> logfile.txt

Sản lượng mẫu sẽ như thế nào

--------------
Mon Mar 06 14:58:48 2009 Process Starting
GNU Super Duper Process PID 12345! Success
Mon Mar 06 21:47:01 2009 Process Ending
--------------

4

một tùy chọn khác là sử dụng timelệnh /tsẽ đưa thời gian hiện tại ra bàn điều khiển (hoặc chuyển hướng đến nhật ký) mà không nhắc thời gian được đặt. có một hạn chế ở chỗ nó sẽ cung cấp cho bạn giờ, phút, nhưng không phải là giây và mili giây.

call time /t  > myLog.log
call mybat   >> myLog.log
call time /t >> myLog.log

Thật không may, "thời gian / t" không xuất ra giây, chỉ "giờ: phút sáng / chiều".
slolife

đúng bạn, tôi đã cập nhật câu trả lời.
akf

1

Nếu bạn có quyền hạn, bạn có thể thực hiện việc này (tất cả một dòng, được chia nhỏ để dễ đọc):

PS C:\> $startTime=Get-Date;ping /n 4 localhost;$endTime=Get-Date;
        echo "Finished in $(($endTime-$startTime).ToString())"

Hoặc lưu tệp này vào một tệp để sử dụng lại dễ dàng hơn.

# usage: .\timer.ps1 program [arguments]

$startTime = Get-Date;
$prog = $args[0];
$progargs = $args[1..($args.length-1)];

&$prog $progargs

$endTime = Get-Date;

echo "Finished in $(($endTime - $startTime).ToString())";

1
In command prompt:
 wmic path win32_operatingsystem get LocalDateTime
 wmic path win32_operatingsystem get LocalDateTime
 wmic path win32_operatingsystem get LocalDateTime

Output:
C:\Users\Steini> wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.370000+000

C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.525000+000

C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.627000+000

15,5ms và 10,2ms bằng Ctrl + v từ clipboard


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.