¿Existe una forma integrada de medir el tiempo de ejecución de un comando en la línea de comandos de Windows?
windows
batch-file
time
cmd
windows-server-2003
Kuroki Kaze
fuente
fuente
Respuestas:
Si usa Windows 2003 (tenga en cuenta que Windows Server 2008 y versiones posteriores no son compatibles) puede usar el Kit de recursos de Windows Server 2003, que contiene timeit.exe que muestra estadísticas detalladas de ejecución. Aquí hay un ejemplo, cronometrando el comando "timeit -?":
Puede obtener TimeIt en el Kit de recursos de Windows 2003. Descárgalo aquí .
fuente
Alternativamente, Windows PowerShell tiene un comando incorporado que es similar al comando "time" de Bash. Se llama "Medida-Comando". Deberá asegurarse de que PowerShell esté instalado en la máquina que lo ejecuta.
Entrada de ejemplo:
Salida de ejemplo:
fuente
.exe
en el directorio actual, utilice la siguiente:Measure-Command { .\your.exe }
. PowerShell aparentemente no ejecuta cosas apwd
menos que se le indique explícitamente.<stdout>
los resultados del comando encerrado entre llaves!Si tu quieres
Intente copiar el siguiente script en un nuevo archivo por lotes (por ejemplo, timecmd.bat ):
Uso
Si coloca timecmd.bat en un directorio en su ruta, puede llamarlo desde cualquier lugar como este:
P.ej
Si desea hacer una redirección de salida, puede citar el comando de esta manera:
Esto debería manejar los comandos que se ejecutan desde antes hasta después de la medianoche, pero la salida será incorrecta si su comando se ejecuta durante 24 horas o más.
fuente
timecmd pause
, y siempre resulta en 1.00 segundos, 2.00 segundos, 4.00 segundos ... ¡incluso 0.00 segundos! Windows 7.delims=:.
adelims=:.,
, y luego debería funcionar "en todos los ámbitos".set start=10:10:10.10
set end=10:11:10.09
Y generará:command took 0:1:-1.99 (59.99s total)
Debe invertir el orden de las 4 líneas que hacen comparaciones "lss 0", de modo que el acarreo progrese correctamente de dígitos sexagesimales bajos a altos. Entonces la salida se convierte en:command took 0:0:59.99 (59.99s total)
Jeje, la solución más simple podría ser esta:
Esto funciona en cada Windows fuera de la caja.
En el caso de una aplicación que utiliza la salida de la consola, puede ser conveniente almacenar el tiempo de inicio en una variable temporal:
fuente
set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time%
(Lo siento, no pude obtener nuevas líneas en el comentario)set
para hacer los cálculos.;-)
Oh, espera, no importa, ya lo hiciste a continuación.Solo una pequeña expansión de la respuesta de Casey.K sobre el uso
Measure-Command
de PowerShell :Puede invocar PowerShell desde el símbolo del sistema estándar, como este:
Esto consumirá el resultado estándar, pero puede evitarlo agregando
| Out-Default
así desde PowerShell:O desde un símbolo del sistema:
Por supuesto, puedes envolver esto en un archivo de script
*.ps1
o*.bat
.fuente
measureTime.bat "c:\program files\some dir\program.exe"
El one-liner que uso en Windows Server 2008 R2 es:
Siempre que mycommand no requiera comillas (que se atornilla con el procesamiento de comillas de cmd). El
/v:on
objetivo es permitir que los dos valores TIME diferentes se evalúen de forma independiente en lugar de una vez en la ejecución del comando.fuente
^
en cmd (como^"
)cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
.echo %time% & *mycommand* & call echo %^time%
. Ver también esta respuesta .cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
Si tiene una ventana de comandos abierta y llama a los comandos manualmente, puede mostrar una marca de tiempo en cada solicitud, por ejemplo
Te da algo como:
Si tiene un pequeño script por lotes que ejecuta sus comandos, tenga una línea vacía antes de cada comando, por ejemplo
Puede calcular el tiempo de ejecución de cada comando por la información de tiempo en la solicitud. Lo mejor probablemente sería canalizar la salida a un archivo de texto para su posterior análisis:
fuente
Como otros recomiendan instalar cosas como freeware y PowerShell, también puede instalar Cygwin , que le daría acceso a muchos comandos básicos de Unix como el tiempo :
No estoy seguro de cuánto agrega Cygwin.
fuente
No es tan elegante como algunas de las funciones de Unix, pero crea un archivo cmd que se vea así:
Eso mostrará los tiempos de inicio y finalización de esta manera:
fuente
time
tiene una/t
opción que solo muestra la hora actual del sistema, sin pedirle que ingrese una nueva hora. Sin embargo, cuando lo hace, solo muestra horas y minutos, lo que puede no ser lo suficientemente bueno para algunos usos. (Ver la respuesta de John Snow a esta pregunta).time /T
¡solo se puede usar si el proceso se ejecuta durante varios minutos!time < nul
Es más feo pero más preciso.echo %time%
que proporciona el mismo formato y precisióntime < nul
, pero evita elEnter the new time:
resultado ...wmic os get LocalDateTime
Yo uso freeware llamado "GS Timer".
Simplemente haga un archivo por lotes como este:
Si necesita un conjunto de veces, simplemente canalice la salida del temporizador / s en un archivo .txt.
Puede obtenerlo aquí: las utilidades gratuitas de DOS de Gammadyne
La resolución es de 0.1 segundos.
fuente
Estoy usando Windows XP y por alguna razón timeit.exe no me funciona. Encontré otra alternativa: PTIME. Esto funciona muy bien
http://www.pc-tools.net/win32/ptime/
Ejemplo
fuente
También está TimeMem (marzo de 2012):
fuente
Mientras no dure más de 24 horas ...
fuente
Aquí hay un
Versión del temporizador Postfix:
Ejemplo de uso:
tiempo de espera 1 | TimeIt.cmd
Copie y pegue esto en algún editor como, por ejemplo, Notepad ++ y guárdelo como TimeIt.cmd :
^ - Basado en la versión 'Daniel Sparks'
fuente
Una alternativa al tiempo de medición es simplemente "Get-Date". No tiene esa molestia con el envío de salida, etc.
Salida:
fuente
Esta es una línea que evita la expansión retrasada , lo que podría alterar ciertos comandos:
La salida es algo así como:
Para las pruebas a largo plazo reemplazan
$T
por$D, $T
y%TIME%
por%DATE%, %TIME%
incluir la fecha.Para usar esto dentro de un archivo por lotes , reemplácelo
%Z
por%%Z
.Actualizar
Aquí hay una línea mejorada (sin expansión tardía también):
El resultado es similar a esto:
Este enfoque no incluye el proceso de instanciar una nueva
cmd
en el resultado, ni incluye losprompt
comandos.fuente
Dependiendo de la versión de Windows que esté usando, solo ejecutarlo
bash
lo pondrá en modo Bash. Esto le permitirá usar un montón de comandos que no están disponibles en PowerShell directamente (como eltime
comando). Sincronizar su comando ahora es tan fácil como ejecutar:Esto funcionó perfectamente para mí (Windows 10) después de probar otros métodos (como
Measure-Command
) que a veces producen estadísticas no deseadas. Espero que esto también funcione para ti.fuente
En caso de que alguien más haya venido aquí buscando una respuesta a esta pregunta, hay una función API de Windows llamada
GetProcessTimes()
. No parece demasiado trabajo escribir un pequeño programa en C que inicie el comando, realice esta llamada y devuelva los tiempos de proceso.fuente
Este es un comentario / edición a Luke Sampson agradable
timecmd.bat
y responde aEn algunas configuraciones, los delimitadores pueden diferir. El siguiente cambio debería cubrir al menos la mayoría de los países occidentales.
Los
%time%
milisegundos funcionan en mi sistema después de agregar que ','(* porque el sitio no permite comentarios anónimos y no mantiene un buen seguimiento de la identidad a pesar de que siempre uso el mismo correo electrónico de invitado que combinado con ipv6 ip y la huella digital del navegador deberían ser suficientes para identificarme sin contraseña)
fuente
Aquí está mi método, sin conversión y sin ms. Es útil para determinar las duraciones de codificación (aunque limitado a 24 horas):
fuente
fuente
El siguiente script usa solo "cmd.exe" y genera el número de milisegundos desde el momento en que se crea una canalización hasta el momento en que se cierra el proceso que precede al script. es decir, escriba su comando y canalice el al script. Ejemplo: "timeout 3 | runtime.cmd" debería producir algo como "2990". Si necesita tanto la salida de tiempo de ejecución como la salida de stdin, redirija el stdin antes de la tubería, por ejemplo: "dir / s 1> temp.txt | runtime.cmd" volcaría la salida del comando "dir" a "temp.txt" e imprimiría el tiempo de ejecución en la consola.
fuente
call :calc
. Yo hice eso aquí. El código de enlace es más agradable de esta manera. : DLa respuesta de driblio puede hacerse un poco más corta (aunque no muy legible)
Para el comentario de Luke Sampson, esta versión es segura para los ojos, aunque la tarea debe completarse en 24 horas.
fuente
set _time=%time: =0%
soluciona el problema de la hora de un solo dígito: reemplácelo en ambos lugares.En el directorio donde está su programa, escriba
notepad mytimer.bat
, haga clic en 'sí' para crear un nuevo archivo.Pegue el código a continuación, reemplácelo
YourApp.exe
con su programa, luego guárdelo.Escriba
mytimer.bat
la línea de comando y luego presione Entrar.fuente
mi código le da el tiempo de ejecución en milisegundos, hasta 24 horas, es insensible a la configuración regional y tiene en cuenta los valores negativos si el código se ejecuta hasta la medianoche. usa expansión demorada y debe guardarse en un archivo cmd / bat.
antes de su código:
después de tu código:
si desea tiempo de ejecución en formato HH: mm: ss.000, agregue:
variable
t2
contiene su tiempo de ejecución, puedeecho %t2%
mostrarlo.fuente
Una vez que Perl haya instalado la solución de contrataciones disponible, ejecute:
STDERR viene antes de los segundos medidos
fuente
Usando un sub para devolver el tiempo en centésimas de segundo
fuente
TIMER "Lean and Mean" con formato regional, 24 horas y soporte de entrada mixta
Adaptación de Aacini cuerpo del método de sustitución , sin IF, solo uno FOR (mi solución regional)
1: archivo timer.bat colocado en algún lugar en% PATH% o el directorio actual
Uso:
timer & echo start_cmds & timeout / t 3 & echo end_cmds & timer
timer & timer "23: 23: 23,00"
timer "23: 23: 23,00" y timer
timer "13.23.23,00" y timer "03: 03: 03.00"
temporizador y temporizador "0: 00: 00.00" no y cmd / v: on / c echo hasta medianoche =! Timer_end!
La entrada ahora se puede mezclar, para aquellos cambios de formato de tiempo improbables pero posibles durante la ejecución
2: Función : temporizador incluido con el script por lotes (uso de muestra a continuación):
:: para probarlo, copie y pegue las secciones de código arriba y abajo
CE, DE y CS, DS significan punto final, punto final y conjunto de dos puntos, conjunto de puntos: se utiliza para compatibilidad con formatos mixtos
fuente
El siguiente script emula * nix epoch time, pero es local y regional. Debe manejar los casos de borde de calendario, incluidos los años bisiestos. Si Cygwin está disponible, los valores de época se pueden comparar especificando Cygwin opción .
Estoy en EST y la diferencia reportada es de 4 horas, lo cual es relativamente correcto. Hay algunas soluciones interesantes para eliminar el TZ y las dependencias regionales, pero no noté nada trivial.
fuente
Una solución que usa PHP puro para cmd y una env. variable:
sin necesidad de cygwin o utilidades no confiables. Útil cuando PHP está disponible localmente
la precisión y el formato de salida se pueden ajustar fácilmente
la misma idea se puede portar para PowerShell
fuente