Windows, еквівалентна команді UNIX «час»


69

Отже, в Unix є timeкоманда, яка дозволяє користувачам обробляти час кодом / іншими речами. Мені було цікаво, чи є в командному рядку Windows щось подібне.

Крім того , я поставив попередній питання щодо командного рядка Linux тут . Чи можемо ми зробити те ж саме для Windows? Якщо так, то як?


2
У Windows є стандартний cmd.exe, але якщо ви хочете щось наблизити до версії Linux, отримайте панель повноважень, її шлях краще.
Guillermo Siliceo Trueba

Я шукав "командний час для Windows" в google за першим результатом дає: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line
Девід Мішель

Я в Windows 7, і я просто спробував рішення, розміщене вище. Я отримую наступне повідомлення про помилку: Unable to query system performance data (c0000004). Я погуглив це, і хтось ще мав таку саму проблему, але форум не пропонує рішення. Дякуємо за пропозицію в будь-якому випадку. Може хтось запропонує щось для іншої частини?
ефективністьIsBliss

@eff, timeit.exe призначений для серверів 2003 та XP AFAIK, я не вважаю його сумісним із 7.
Джон Т

Відповіді:


57

Використовуйте Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Відредаговано відповідно до ваших потреб @efficiencylsBliss:

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

Ось що я пробував: Measure-Command {java test <inputfile> -Wait}. Я отримав список статистики, пов'язаної з часом, але не вихід з коду. Я щось роблю не так?
ефективністьIsBliss

@efficiency: Ви забули start-processкоманду.
Саша Чедигов

Start-Process: не можна знайти позиційний параметр, який приймає аргумент '. \ 6-8.txt'. У рядку: 1 char: 31 + Measure-Command {start-process <<<< java. \ Dancebattle. \ 6-8.txt -очекати} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
ефективністьIsBliss

1
Я намагаюся виміряти час, необхідний для запуску сценарію Python, використовуючи Measure-Command {start-process \Python27\python test.py -Wait}. Це відкриває нове вікно cmd для запуску процесу, але потім закриває вікно, коли він закінчується. Я також хотів би побачити вихід сценарію, тож як я можу тримати вікно відкритим?
Джон Пітер Томпсон Гарсе

2
@ JohnPeterThompsonGarcés використовує параметр -NoNewWindow командлета стартового процесу
mjsr

21

Я використовую Win XP чомусь timeit.exeне працює для мене. Я знайшов іншу альтернативу ptime:

ptime 1.0 - Точно вимірюйте час виконання програми

ptime запустить будь-яку задану команду та параметри та виміряє час виконання (час виконання) в секундах, точним до 5 мілісекунд або вище. Це автоматичний таймер процесу або програмний таймер, який використовується для цілей.


ptime мати одну маленьку помилку. ptime завжди повертає 0 як рівень помилки, навіть якщо "дитяча" програма виходить із помилкою
Юра Шинкарев

Супер простий і точний вихід.
Янпіо

Здається, добре працює в Win10.
mivk

17

Ви можете трохи обдурити за допомогою пакетного сценарію ...

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

Потім запустіть свою програму як аргумент цього сценарію ...

таймер myprogram.exe

і для аргументів ...

таймер "myprogram.exe -sw1 -sw2"

Приклад виведення:

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

розмістіть пакетний скрипт десь у вашій змінній PATH, наприклад, C:\Windows\System32і назвіть його timer.cmd. Звичайно, є невеликий хіт продуктивності розгортання другого екземпляра cmd, хоча дуже мінімальний.


що підказка не спрацює, @echo off echo %time% < nul cmd /c %1 echo %time% < nul ви залишили закриваючий% на змінній оточення (?)

Немає закриття% для параметрів командного рядка, як% 1. Це ви мали на увазі?
Ендрю Дж. Брем

2
Навіщо ви поміняєте nul в echo ? echoніколи не читає введення.
Joey

1
Ви можете змінити cmd /c %1на cmd /c %*, щоб ви могли зберегти лапки для аргументів команди
stanleyxu2005

3

У timeWindows немає прямого еквівалента Unix .

Університет Джорджії має короткий список команд Windows для користувачів Unix

Я вважаю, що старший командний рядок Windows і сценарії .bat є досить обмеженими порівняно з оболонками Unix, але є деякі засоби для циклічного перегляду файлів тощо. CommandWindows.com має кілька порад

Ви можете або встановити bashв Windows (наприклад, встановивши CygWin), або навчившись Windows Powershell (який, я вважаю, має засіб зробити щось рівнозначне).


2

Вихід для вашого коду може бути переданий у файл: java test <inputfile> | Out-File d:\a.txt

Щоб виміряти, скільки часу вам потрібно, необхідно інкапсулювати його в Measure-Commmand:

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


2

Якщо ви спробуєте використати PowerShell разом з Measure-Command, будьте в курсі, що можуть виникнути якісь несподівані виклики. Моя команда записує бінарні дані у файл, використовуючи >перенаправлення, але PowerShell додав BOM на початок файлу та розрив рядка CRLF після кожного запису!


1

Деякі кави допомогли мені придумати це:

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

І якщо ви хочете, щоб він нічого не видав, просто замініть його на out-null:

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

Ви використовуєте його так:

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

Для зручності використання ось упаковка шоколаду: https://chocolatey.org/packages/ptime C:/> choco install ptime

Перевага в тому ptime, що вона діє як версія Unix і дає вихід консолі, що Measure-Command { XXX }не робить (або, принаймні, я не знаю, як це зробити).


0

Є кілька різних варіантів, щоб отримати команду 'time'. Моя перевага - просто встановити Cygwin (який поставляється з timeкомандою UNIX ).

Крім того, ви можете написати сценарій і додати його до свого шляху (так що ви можете виконати його, не вказуючи весь шлях).

Якщо у вас є Powershell , спробуйте цей скрипт (працює при виклику файлів - ". Exe" тощо):

$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

Запустіть код за допомогою (наприклад):

time.ps1 python program.py

Використовуючи Batch , я б запропонував один із найкращих відповідей звідси (на Stackoverflow.com) . І те й інше потрібно копіювати. Зауважте, що якщо ви використовуєте розчин paxdiablo , його слід замінити

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

з

%*

0

gnomon - прекрасне рішення, якщо вам не потрібен лише загальний час виконання команди, але і рядок для вимірювання рядків:

Утиліта командного рядка для додавання інформації про часові позначки до стандартного виводу іншої команди. Корисно для тривалих процесів, де ви хочете отримати історичний запис того, що триває так довго.

Встановлюється за допомогою запуску npm install -g gnomon, а потім просто використовуйте його через command | gnomon.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.