Existe uma maneira interna de medir o tempo de execução de um comando na linha de comando do Windows?
windows
batch-file
time
cmd
windows-server-2003
Kuroki Kaze
fonte
fonte
Respostas:
Se você estiver usando o Windows 2003 (observe que o Windows Server 2008 e versões posteriores não são suportadas), poderá usar o Windows Server 2003 Resource Kit, que contém timeit.exe que exibe estatísticas detalhadas de execução. Aqui está um exemplo, cronometrando o comando "timeit -?":
Você pode obter o TimeIt no Windows 2003 Resource Kit. Faça o download aqui .
fonte
Como alternativa, o Windows PowerShell possui um comando interno semelhante ao comando "time" do Bash. É chamado "Medida-Comando". Você precisará garantir que o PowerShell esteja instalado na máquina que o executa.
Exemplo de entrada:
Saída de exemplo:
fonte
.exe
no diretório atual, use o seguinte:Measure-Command { .\your.exe }
. Aparentemente, o PowerShell não executa as coisas, apwd
menos que seja explicitamente instruído.<stdout>
resultados do comando entre colchetes!Se você quiser
Tente copiar o seguinte script em um novo arquivo em lotes (por exemplo, timecmd.bat ):
Uso
Se você colocar timecmd.bat em um diretório em seu caminho, poderá chamá-lo de qualquer lugar como este:
Por exemplo
Se você deseja fazer o redirecionamento de saída, pode citar o comando da seguinte maneira:
Isso deve lidar com comandos que são executados antes e depois da meia-noite, mas a saída estará errada se o seu comando for executado por 24 horas ou mais.
fonte
timecmd pause
, e sempre resulta em 1,00 seg, 2,00 seg, 4,00 seg ... até 0,00 seg! Windows 7.delims=:.
paradelims=:.,
e, em seguida, ele deve funcionar "de maneira geral".set start=10:10:10.10
set end=10:11:10.09
E ele produzirá:command took 0:1:-1.99 (59.99s total)
Você deve reverter a ordem das 4 linhas que fazem comparações "lss 0", para que o transporte progrida corretamente dos dígitos sexagesimais mínimos para os altos. Em seguida, a saída se torna:command took 0:0:59.99 (59.99s total)
Hehe, a solução mais simples pode ser a seguinte:
Isso funciona em todos os Windows prontos para uso.
No caso de um aplicativo usar saída do console, pode ser conveniente armazenar o horário de início em uma variável temporária:
fonte
set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time%
(Desculpe, não pude obter novas linhas no comentário)set
para fazer as contas.;-)
Oh espera, deixa pra lá, você já fez isso abaixo.Apenas uma pequena expansão da resposta da Casey.K sobre o uso
Measure-Command
do PowerShell :Você pode invocar o PowerShell no prompt de comando padrão, assim:
Isso consumirá a saída padrão, mas você pode impedir isso adicionando
| Out-Default
assim do PowerShell:Ou em um prompt de comando:
Obviamente, você pode agrupar isso em um arquivo de script
*.ps1
ou*.bat
.fonte
measureTime.bat "c:\program files\some dir\program.exe"
A linha única que eu uso no Windows Server 2008 R2 é:
Enquanto mycommand não requer aspas (que parafusos com processamento citação de cmd). O
/v:on
objetivo é permitir que os dois valores TIME diferentes sejam avaliados independentemente, e não uma vez na execução do comando.fonte
^
em cmd (like^"
)cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
.echo %time% & *mycommand* & call echo %^time%
. Veja também esta resposta .cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
Se você tiver uma janela de comando aberta e chamar os comandos manualmente, poderá exibir um carimbo de data / hora em cada prompt, por exemplo
Dá-lhe algo como:
Se você tiver um pequeno script em lote que execute seus comandos, tenha uma linha vazia antes de cada comando, por exemplo
Você pode calcular o tempo de execução de cada comando pelas informações de tempo no prompt. O melhor seria provavelmente canalizar a saída para um arquivo de texto para análise posterior:
fonte
Como outros recomendam a instalação de coisas como freeware e PowerShell, você também pode instalar o Cygwin , que daria acesso a muitos comandos básicos do Unix, como o tempo :
Não tenho certeza de quanto Cygwin sobrecarga acrescenta.
fonte
Não é tão elegante quanto algumas das funcionalidades do Unix, mas cria um arquivo cmd que se parece com:
Isso exibirá os horários de início e término da seguinte forma:
fonte
time
possui uma/t
opção que apenas exibe a hora atual do sistema, sem solicitar que você insira uma nova hora. No entanto, quando você faz isso, ele exibe apenas horas e minutos, o que pode não ser bom o suficiente para alguns usos. (Resposta See de John Snow a esta pergunta.)time /T
é utilizável apenas se o processo for executado por vários minutos!time < nul
é mais feio, mas mais preciso.echo %time%
que fornece o mesmo formato e precisão comotime < nul
, mas você evitar aEnter the new time:
saída ...wmic os get LocalDateTime
Eu uso o freeware chamado "GS Timer".
Basta criar um arquivo em lotes como este:
Se você precisar de um conjunto de horários, basta canalizar a saída do timer / s em um arquivo .txt.
Você pode obtê-lo aqui: Utilitários gratuitos para Gammadyne
A resolução é de 0,1 segundos.
fonte
Estou usando o Windows XP e, por algum motivo, o timeit.exe não funciona para mim. Encontrei outra alternativa - PTIME. Isso funciona muito bem.
http://www.pc-tools.net/win32/ptime/
Exemplo -
fonte
Há também o TimeMem (março de 2012):
fonte
Contanto que não dure mais de 24 horas ...
fonte
Aqui está um
Versão do timer Postfix:
Exemplo de uso:
timeout 1 | TimeIt.cmd
Copie e cole isso em algum editor como, por exemplo, o Notepad ++ e salve-o como TimeIt.cmd :
^ - Baseado na versão 'Daniel Sparks'
fonte
Uma alternativa para medir o tempo é simplesmente "Get-Date". Você não tem esse problema com o encaminhamento de saída e assim por diante.
Resultado:
fonte
Este é um one-liner que evita a expansão atrasada , o que pode perturbar certos comandos:
A saída é algo como:
Para longo prazo testes substituir
$T
por$D, $T
e%TIME%
por%DATE%, %TIME%
incluir a data.Para usar isso dentro de um arquivo em lotes , substitua
%Z
por%%Z
.Atualizar
Aqui está um one-liner aprimorado (sem expansão tardia também):
A saída é semelhante a esta:
Essa abordagem não inclui o processo de instanciar uma nova
cmd
no resultado, nem oprompt
(s) comando (s).fonte
Dependendo da versão do Windows que você está usando, apenas a execução
bash
o colocará no modo Bash. Isso permitirá que você use vários comandos que não estão disponíveis diretamente no PowerShell (como otime
comando). Cronometrar seu comando agora é tão fácil quanto executar:Isso funcionou perfeitamente para mim (Windows 10) depois de experimentar outros métodos (como
Measure-Command
) que às vezes produzem estatísticas indesejadas. Espero que isso funcione para você também.fonte
Caso alguém mais tenha procurado uma resposta para essa pergunta, existe uma função da API do Windows chamada
GetProcessTimes()
. Não parece muito trabalho escrever um pequeno programa C que inicie o comando, faça essa chamada e retorne os tempos do processo.fonte
Este é um comentário / edição para agradável de Luke Sampson
timecmd.bat
e resposta paraEm algumas configurações, os delimitadores podem diferir. A seguinte mudança deve abranger os países da maioria dos países ocidentais.
Os
%time%
milissegundos funcionam no meu sistema depois de adicionar ','(* porque o site não permite nenhum comentário e não mantém um bom controle de identidade, embora eu sempre use o mesmo email de convidado que combinado com o ipv6 ip e a impressão digital do navegador seja suficiente para identificar exclusivamente sem senha)
fonte
Aqui está o meu método, sem conversão e sem ms. É útil determinar as durações de codificação (embora limitadas a 24 horas):
fonte
fonte
O script a seguir usa apenas "cmd.exe" e gera o número de milissegundos desde o momento em que um pipeline é criado até o momento em que o processo anterior ao script termina. ou seja, digite seu comando e direcione para o script. Exemplo: "timeout 3 | runtime.cmd" deve render algo como "2990". Se você precisar da saída do tempo de execução e da saída stdin, redirecione o stdin antes do pipe - ex: "dir / s 1> temp.txt | runtime.cmd" despejaria a saída do comando "dir" para "temp.txt" e imprimiria o tempo de execução no console.
fonte
call :calc
. Eu fiz isso aqui. O Code get é um pouco melhor assim. : DA resposta de driblio pode ser um pouco mais curta (embora não seja muito legível)
Para a observação de Luke Sampson, esta versão é octal segura, embora a tarefa deva ser concluída em 24 horas.
fonte
set _time=%time: =0%
corrige o problema da hora de um dígito - substitua nos dois lugares.No diretório em que está o seu programa, digite
notepad mytimer.bat
, clique em 'yes' para criar um novo arquivo.Cole o código abaixo, substituindo
YourApp.exe
pelo seu programa, e salve.Digite
mytimer.bat
na linha de comando e pressione Enter.fonte
meu código fornece o tempo de execução em milissegundos, até 24 horas, é insensível à localidade e responde por valores negativos se o código for executado até meia-noite. ele usa expansão atrasada e deve ser salvo em um arquivo cmd / bat.
antes do seu código:
após o seu código:
se você deseja tempo de execução no formato HH: mm: ss.000, adicione:
variável
t2
mantém seu tempo de execução, você podeecho %t2%
exibi-lo.fonte
Tendo o Perl instalado a solução de contratações disponível, execute:
STDERR vem antes dos segundos medidos
fonte
Usando um sub para retornar o tempo em centésimos de segundo
fonte
TIMER "Lean and Mean" com formato Regional, 24h e suporte a entrada mista
Adaptando o corpo do método de substituição de Aacini , sem IFs, apenas um FOR (minha correção regional)
1: Arquivo timer.bat colocado em algum lugar no% PATH% ou no diretório atual
Uso:
temporizador & echo start_cmds & tempo limite / t 3 & echo end_cmds & temporizador
temporizador e temporizador "23: 23: 23,00"
temporizador "23: 23: 23,00" & temporizador
temporizador "13.23.23,00" e temporizador "03: 03: 03.00"
timer e timer "0: 00: 00.00" no & cmd / v: on / c eco até meia-noite =! Timer_end!
A entrada agora pode ser mista, para aqueles improváveis, mas possíveis alterações no formato de hora durante a execução
2: Função : timer incluído no script em lote (uso de exemplo abaixo):
:: para testá-lo, copie e cole as seções de código acima e abaixo
CE, DE e CS, DS representam final de dois pontos, final de ponto e conjunto de dois pontos, conjunto de pontos - usado para suporte a formatos mistos
fonte
O script a seguir emula o tempo da época * nix, mas é local e regional. Ele deve lidar com casos de borda de calendário, incluindo anos bissextos. Se o Cygwin estiver disponível, os valores da época poderão ser comparados especificando a opção Cygwin .
Estou no EST e a diferença relatada é de 4 horas, o que é relativamente correto. Existem algumas soluções interessantes para remover as dependências regionais e TZ, mas nada trivial que eu notei.
fonte
Uma solução usando PHP puro para cmd e um env. variável:
não há necessidade de cygwin ou utilitários não confiáveis. Útil quando o PHP está disponível localmente
precisão e formato de saída podem ser facilmente ajustados
a mesma ideia pode ser portada para o PowerShell
fonte