Windows tương đương với lệnh UNIX thời gian UNIX UNIX


69

Vì vậy, Unix có một timelệnh cho phép người dùng thời gian mã của họ / những thứ khác. Tôi đã tự hỏi nếu dòng lệnh Windows có bất cứ điều gì tương tự.

Ngoài ra, tôi đã hỏi một câu hỏi trước đó liên quan đến dòng lệnh Linux ở đây . Chúng ta có thể làm tương tự cho Windows không? Nếu vậy thì thế nào?


2
Windows có cmd.exe tiêu chuẩn nhưng nếu bạn muốn một cái gì đó gần hơn với phiên bản linux, hãy lấy powershell, cách của nó tốt hơn.
Guillermo Siliceo Trueba

Tôi đã tìm kiếm "thời gian lệnh cho các cửa sổ" trên google trên kết quả đầu tiên mang lại: http://stackoverflow.com/questions/673523/how-to-measure-execut-time-of-command-in-windows-command-line
David Michel

Tôi đang dùng Windows 7 và tôi vừa thử giải pháp được đăng ở trên. Tôi nhận được lỗi sau : Unable to query system performance data (c0000004). Tôi đã googled nó và một người khác có cùng một vấn đề, nhưng diễn đàn cho thấy không có giải pháp. Cảm ơn vì lời đề nghị nào. Ai đó có thể đề nghị một cái gì đó cho phần khác?
hiệu

@eff, timeit.exe dành cho máy chủ 2003 và XP AFAIK, tôi không nghĩ nó tương thích với 7.
John T

Câu trả lời:


57

Sử dụng Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Đã chỉnh sửa theo nhu cầu của bạn @efficiencylsBliss:

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}

Đây là những gì tôi đã cố gắng : Measure-Command {java test <inputfile> -Wait}. Tôi có một danh sách các số liệu thống kê liên quan đến thời gian, nhưng không phải là đầu ra từ mã. Tôi có làm điều gì sai?
hiệu

@ hiệu quả: Bạn quên start-processlệnh.
Sasha Chedygov

Quá trình bắt đầu: Không thể tìm thấy tham số vị trí chấp nhận đối số '. \ 6-8.txt'. Tại dòng: 1 char: 31 + Lệnh-Lệnh {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: UnlimitedArgument: (:) [Start-Process], ParameterBindingException + FullQualifiedErrorId : PositableParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
hiệu

1
Tôi đang cố gắng đo thời gian cần thiết để chạy tập lệnh Python bằng cách sử dụng Measure-Command {start-process \Python27\python test.py -Wait}. Điều này sẽ mở ra một cửa sổ cmd mới để chạy tiến trình, nhưng sau đó đóng cửa sổ khi nó chạy xong. Tôi cũng muốn xem đầu ra của tập lệnh, vậy làm cách nào để mở cửa sổ?
John Peter Thompson Garcés

2
@ JohnPeterThndryGarcés sử dụng tham số -NoNewWindow của lệnh ghép ngắn quy trình bắt đầu
mjsr

21

Vì một số lý do, tôi đang sử dụng Win XP timeit.exekhông hoạt động. Tôi tìm thấy một sự thay thế khác ptime::

ptime 1.0 - Đo chính xác thời gian thực hiện chương trình

ptime sẽ chạy bất kỳ lệnh và tham số đã chỉ định nào và đo thời gian thực hiện (thời gian chạy) tính bằng giây, chính xác đến 5 mili giây hoặc tốt hơn. Nó là một bộ đếm thời gian tự động, hoặc bộ đếm thời gian chương trình được sử dụng cho mục đích điểm chuẩn.


ptime có một lỗi nhỏ. ptime luôn trả về 0 là mức lỗi, ngay cả khi chương trình "con" thoát có lỗi
Yura Shinkarev

Đầu ra siêu đơn giản và chính xác.
janpio

Có vẻ hoạt động tốt trong Win10.
mivk

18

Bạn có thể gian lận một chút với một tập lệnh bó ...

@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul

Sau đó chạy chương trình của bạn làm đối số cho tập lệnh này ...

hẹn giờ myprogram.exe

và để tranh luận ...

hẹn giờ "myprogram.exe -sw1 -sw2"

đầu ra ví dụ:

17:59:20.02
some text
17:59:20.03

đặt tập lệnh bó ở đâu đó trong biến PATH của bạn, ví dụ C:\Windows\System32và đặt tên cho nó timer.cmd. Tất nhiên, có một hiệu suất nhỏ của việc giả mạo một ví dụ cmd thứ hai, mặc dù rất nhỏ.


lời nhắc đó sẽ không hoạt động, @echo off echo %time% < nul cmd /c %1 echo %time% < nul bạn đã bỏ qua% đóng trên biến môi trường (?)

Không có% đóng cho các tham số dòng lệnh như% 1. Đó có phải ý của bạn?
Andrew J. Brehm

2
Tại sao bạn lại chuyển hướng nul vào echo ? echokhông bao giờ đọc đầu vào.
Joey

1
Bạn có thể thay đổi cmd /c %1thành cmd /c %*, để bạn có thể lưu dấu ngoặc kép cho các đối số lệnh
stanleyxu2005

3

Không có tương đương trực tiếp với Unix timetrên Windows.

Đại học Georgia có một danh sách ngắn gọn các lệnh Windows cho người dùng Unix

Tôi thấy dấu nhắc lệnh Windows cũ hơn và tập lệnh .bat khá hạn chế so với shell Unix nhưng có một số phương tiện để lặp qua các tệp, v.v. CommandWindows.com có ​​một số mẹo

Bạn có thể cài đặt bashtrên Windows (ví dụ: bằng cách cài đặt CygWin) hoặc tìm hiểu Windows Powershell (mà tôi giả sử có một phương tiện để làm một cái gì đó tương đương).


2

Đầu ra cho mã của bạn có thể được dẫn đến một tệp: java test <inputfile> | Out-File d:\a.txt

Để đo thời gian bạn phải đóng gói trong Biện pháp-Cam kết:

Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}


2

Nếu bạn cố gắng sử dụng PowerShell với Biện pháp-Lệnh, hãy lưu ý rằng có thể có một số vấn đề không mong muốn. Lệnh của tôi ghi dữ liệu nhị phân vào một tệp bằng cách sử dụng >chuyển hướng nhưng PowerShell đã thêm BOM vào đầu tệp và ngắt dòng CRLF sau mỗi lần ghi!


1

Một số cà phê đã giúp tôi đưa ra điều này:

function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }

Và nếu bạn muốn nó không xuất ra gì, chỉ cần thay thế bằng out-null:

function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }

Bạn sử dụng nó như thế này:

PS C:\> time sleep 5


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 990
Ticks             : 49906722
TotalDays         : 5,77624097222222E-05
TotalHours        : 0,00138629783333333
TotalMinutes      : 0,08317787
TotalSeconds      : 4,9906722
TotalMilliseconds : 4990,6722



PS C:\>

1

Để dễ sử dụng, đây là gói sô cô la: https://chocolatey.org/packages/ptime C:/> choco install ptime

Lợi thế nếu ptimenó hoạt động như phiên bản unix và mang lại đầu ra giao diện điều khiển, điều Measure-Command { XXX }này không (hoặc ít nhất là tôi không biết làm thế nào để làm điều đó).


0

Có một vài lựa chọn khác nhau để nhận lệnh 'time'. Sở thích của tôi là chỉ cài đặt Cygwin (đi kèm với timelệnh giống như UNIX ).

Ngoài ra, bạn có thể viết một tập lệnh và thêm nó vào đường dẫn của bạn (để bạn có thể thực thi nó mà không chỉ định toàn bộ đường dẫn).

Nếu bạn có sẵn Powershell , hãy thử tập lệnh này (hoạt động khi gọi các tệp - '. Exe', v.v.):

$start = get-date
if ($args.length -gt 1) {
start-process $args[0] $args[1..$args.length] -workingdirectory $pwd -nonewwindow -wait
} else {
start-process $args[0] -workingdirectory $pwd -nonewwindow -wait
}
$end = get-date
$elapsed = $end - $start
write-host $end-$start
# datetime format
write-host $elapsed
# easy-to-read format
echo $elapsed

Chạy mã với (ví dụ):

time.ps1 python program.py

Sử dụng Batch , tôi muốn đề xuất một trong những câu trả lời hàng đầu từ đây (trên Stackoverflow.com) . Cả hai chỉ cần được sao chép-dán. Lưu ý rằng nếu bạn sử dụng giải pháp của paxdiablo , bạn nên thay thế

ping -n 11 127.0.0.1 >nul: 2>nul: 

với

%*

0

gnomon là một giải pháp tốt nếu bạn không chỉ cần tổng thời gian chạy của lệnh mà còn cả dòng cho phép đo dòng:

Một tiện ích dòng lệnh để thêm thông tin dấu thời gian vào đầu ra tiêu chuẩn của một lệnh khác. Hữu ích cho các quy trình dài mà bạn muốn ghi lại lịch sử về những gì mất quá nhiều thời gian.

Cài đặt bằng cách chạy npm install -g gnomon, sau đó chỉ cần sử dụng thông qua command | gnomon.

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.