Windows equivalente ao comando "time" do UNIX

62

Portanto, o Unix tem um comando time que permite que os usuários calculem seu código / outras coisas. Eu queria saber se a linha de comando do Windows tem algo parecido.

Além disso, fiz uma pergunta anterior sobre a linha de comando do Linux aqui . Podemos fazer o mesmo para o Windows? Se sim, como?

    
por efficiencyIsBliss 01.01.2011 / 23:47

10 respostas

54

Use o Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Editado conforme sua necessidade @efficiencylsBliss:

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}
    
por 02.01.2011 / 00:21
20

Estou usando o Win XP, por algum motivo, timeit.exe não está funcionando para mim. Eu encontrei outra alternativa: ptime :

ptime 1.0 - Accurately measure program execution time

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

    
por 06.03.2012 / 06:53
15

Você pode trapacear um pouco com um script em lote ...

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

Em seguida, execute seu programa como um argumento para esse script ...

timer myprogram.exe

e para argumentos ...

timer "myprogram.exe -sw1 -sw2"
Exemplo de saída

:

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

coloque o script em lotes em algum lugar na sua variável PATH, por exemplo C:\Windows\System32 e nomeie timer.cmd . É claro que há um pequeno impacto no desempenho de bifurcação de uma segunda instância de cmd, embora seja muito pequena.

    
por 01.01.2011 / 23:58
3

Não há equivalente direto ao Unix time no Windows.

A Universidade da Geórgia tem uma breve lista de comandos do Windows para usuários do Unix

Acho que o prompt de comando mais antigo do Windows e o script .bat são bastante limitados em comparação com os shells Unix, mas há algumas facilidades para executar loops sobre arquivos, etc. O CommandWindows.com tem alguns dicas

Você pode instalar bash no Windows (por exemplo, instalando o CygWin) ou aprender o Windows Powershell (que, presumo, tem um meio de fazer algo equivalente).

    
por 01.01.2011 / 23:54
2

A saída para o seu código pode ser canalizada para um arquivo: java test <inputfile> | Out-File d:\a.txt

Para medir quanto tempo você precisa encapsular no Measure-Commmand:

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

    
por 02.01.2011 / 02:31
2

Se você tentar usar o PowerShell com o Measure-Command, saiba que pode haver algumas dicas inesperadas. Meu comando grava dados binários em um arquivo usando o redirecionamento > , mas o PowerShell adicionou uma BOM para o início do arquivo e uma quebra de linha CRLF após cada gravação!

    
por 12.01.2011 / 09:05
0

Existem algumas opções diferentes para obter um comando de 'tempo'. Minha preferência é apenas instalar o Cygwin (que vem com um comando time do tipo UNIX).

Alternativamente, você pode escrever um script e adicioná-lo ao seu caminho (para que você possa executá-lo sem especificar o caminho inteiro).

Se você tiver o Powershell disponível, experimente este script (funciona ao chamar arquivos - '. exe', etc.):

$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

Execute o código com (por exemplo):

time.ps1 python program.py

Usando o Lote , sugiro uma das principais respostas de aqui (no Stackoverflow.com) . Ambos precisam apenas ser copiados e colados. Observe que, se você usar a solução do paxdiablo , deverá substituir

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

com

%*
    
por 15.03.2013 / 23:11
0

Algum café me ajudou a pensar nisso:

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

E se você quiser que não saia nada, apenas substitua por out-null:

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

Você usa assim:

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:\>
    
por 29.01.2018 / 12:10
0

gnomon é uma boa solução se você não precisa apenas do tempo total de execução de um comando, mas também de linha para linha medições:

A command line utility to prepend timestamp information to the standard output of another command. Useful for long-running processes where you'd like a historical record of what's taking so long.

Instalado executando npm install -g gnomon e, em seguida, use-o via command | gnomon .

    
por 20.08.2018 / 10:51
0

Para facilidade de uso, aqui está o pacote de chocolate: link C:/> choco install ptime

A vantagem se ptime é que ele age como a versão unix e produz a saída do console, o que Measure-Command { XXX } não faz (ou pelo menos eu não sei como fazer isso).

    
por 08.11.2018 / 09:39