Existe-t-il un moyen intégré de mesurer le temps d'exécution d'une commande sur la ligne de commande Windows?
windows
batch-file
time
cmd
windows-server-2003
Kuroki Kaze
la source
la source
Réponses:
Si vous utilisez Windows 2003 (notez que Windows Server 2008 et versions ultérieures ne sont pas prises en charge), vous pouvez utiliser le Kit de ressources Windows Server 2003, qui contient timeit.exe qui affiche des statistiques d'exécution détaillées. Voici un exemple, chronométrant la commande "timeit -?":
Vous pouvez obtenir TimeIt dans le Kit de ressources Windows 2003. Téléchargez-le ici .
la source
Alternativement, Windows PowerShell a une commande intégrée qui est similaire à la commande "time" de Bash. Cela s'appelle "Mesure-Commande". Vous devrez vous assurer que PowerShell est installé sur la machine qui l'exécute.
Exemple d'entrée:
Exemple de sortie:
la source
.exe
dans le répertoire courant, utilisez:Measure-Command { .\your.exe }
. PowerShell n'exécute apparemment pas les choses àpwd
moins d'y être explicitement invité.<stdout>
aux résultats de la commande entre crochets!Si tu veux
Essayez de copier le script suivant dans un nouveau fichier de commandes (par exemple timecmd.bat ):
Usage
Si vous placez timecmd.bat dans un répertoire de votre chemin, vous pouvez l'appeler de n'importe où comme ceci:
Par exemple
Si vous voulez faire une redirection de sortie, vous pouvez citer la commande comme ceci:
Cela devrait gérer les commandes qui s'exécutent avant-après minuit, mais la sortie sera incorrecte si votre commande s'exécute pendant 24 heures ou plus.
la source
timecmd pause
, et cela se traduit toujours par 1,00 sec, 2,00 sec, 4,00 sec ... même 0,00 sec! Windows 7.delims=:.
àdelims=:.,
, et ensuite cela devrait fonctionner "à tous les niveaux".set start=10:10:10.10
set end=10:11:10.09
Et il produira:command took 0:1:-1.99 (59.99s total)
Vous devez inverser l'ordre des 4 lignes qui font des comparaisons "lss 0", de sorte que le report progresse correctement des chiffres sexagésimaux bas à haut. La sortie devient alors:command took 0:0:59.99 (59.99s total)
Hehe, la solution la plus simple pourrait être la suivante:
Cela fonctionne sur toutes les fenêtres prêtes à l'emploi.
Dans le cas d'une application utilisant la sortie console, il peut être pratique de stocker l'heure de début dans une variable temporaire:
la source
set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time%
(Désolé, impossible d'obtenir des retours à la ligne dans le commentaire)set
pour faire le calcul.;-)
Oh attends, peu importe, tu l'as déjà fait ci-dessous.Juste une petite extension de la réponse de Casey.K à propos de l'utilisation
Measure-Command
de PowerShell :Vous pouvez appeler PowerShell à partir de l'invite de commande standard, comme ceci:
Cela mangera la sortie standard, mais vous pouvez empêcher cela en ajoutant
| Out-Default
comme ceci à partir de PowerShell:Ou à partir d'une invite de commande:
Bien sûr, vous êtes libre de l'envelopper dans un fichier script
*.ps1
ou*.bat
.la source
measureTime.bat "c:\program files\some dir\program.exe"
Le one-liner que j'utilise dans Windows Server 2008 R2 est:
Tant que ma commande ne nécessite pas de guillemets (qui se visse avec le traitement des devis de cmd). Il
/v:on
s'agit de permettre aux deux valeurs TIME différentes d'être évaluées indépendamment plutôt qu'une fois lors de l'exécution de la commande.la source
^
en cmd (comme^"
)cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
.echo %time% & *mycommand* & call echo %^time%
. Voir aussi cette réponse .cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
Si une fenêtre de commande est ouverte et appelle les commandes manuellement, vous pouvez afficher un horodatage à chaque invite, par exemple
Cela vous donne quelque chose comme:
Si vous avez un petit script batch qui exécute vos commandes, ayez une ligne vide avant chaque commande, par exemple
Vous pouvez calculer le temps d'exécution pour chaque commande en fonction des informations de temps dans l'invite. Le mieux serait probablement de diriger la sortie vers un fichier texte pour une analyse plus approfondie:
la source
Étant donné que d'autres recommandent d'installer des choses comme les logiciels gratuits et PowerShell, vous pouvez également installer Cygwin , ce qui vous donnerait accès à de nombreuses commandes Unix de base comme le temps :
Je ne sais pas combien de frais généraux Cygwin ajoute.
la source
Pas aussi élégant que certaines des fonctionnalités d'Unix, mais créez un fichier cmd qui ressemble à:
Cela affichera les heures de début et de fin comme suit:
la source
time
possède une/t
option qui affiche simplement l'heure actuelle du système, sans vous inviter à entrer une nouvelle heure. Cependant, lorsque vous faites cela, il n'affiche que les heures et les minutes, ce qui peut ne pas être suffisant pour certaines utilisations. (Voir la réponse de John Snow à cette question.)time /T
n'est utilisable que si le processus dure plusieurs minutes!time < nul
est plus laid mais plus précis.echo %time%
ce qui fournit le même format et la même précision quetime < nul
, mais vous évitez laEnter the new time:
sortie ...wmic os get LocalDateTime
J'utilise un logiciel gratuit appelé "GS Timer".
Créez simplement un fichier batch comme celui-ci:
Si vous avez besoin d'un ensemble d'heures, dirigez simplement la sortie de timer / s dans un fichier .txt.
Vous pouvez l'obtenir ici: Les utilitaires DOS gratuits de Gammadyne
La résolution est de 0,1 seconde.
la source
J'utilise Windows XP et pour une raison quelconque, timeit.exe ne fonctionne pas pour moi. J'ai trouvé une autre alternative - PTIME. Cela fonctionne très bien.
http://www.pc-tools.net/win32/ptime/
Exemple -
la source
Il y a aussi TimeMem (mars 2012):
la source
Tant qu'il ne dure pas plus de 24h ...
la source
Voici une
Version du temporisateur Postfix:
Exemple d'utilisation:
délai d'expiration 1 | TimeIt.cmd
Copiez et collez ceci dans un éditeur comme par exemple Notepad ++ et enregistrez-le sous TimeIt.cmd :
^ - Basé sur la version de «Daniel Sparks»
la source
Une alternative à la mesure du temps est simplement "Get-Date". Vous n'avez pas ce tracas avec la sortie de transfert et ainsi de suite.
Production:
la source
Il s'agit d'un monocylindre qui évite une expansion retardée , ce qui pourrait perturber certaines commandes:
La sortie est quelque chose comme:
Pour les tests à long terme, remplacer
$T
par$D, $T
et%TIME%
par%DATE%, %TIME%
pour inclure la date.Pour l'utiliser à l'intérieur d'un fichier de commandes , remplacez
%Z
par%%Z
.Mise à jour
Voici une doublure améliorée (sans expansion retardée aussi):
La sortie ressemble à ceci:
Cette approche n'inclut pas le processus d'instanciation d'une nouvelle
cmd
dans le résultat, ni la ou lesprompt
commandes.la source
Selon la version de Windows que vous utilisez, une simple exécution
bash
vous mettra en mode Bash. Cela vous permettra d'utiliser un tas de commandes qui ne sont pas disponibles directement sur PowerShell (comme latime
commande). Le chronométrage de votre commande est désormais aussi simple que l'exécution:Cela a fonctionné parfaitement pour moi (Windows 10) après avoir essayé d'autres méthodes (comme
Measure-Command
) qui produisent parfois des statistiques indésirables. J'espère que cela fonctionne aussi pour vous.la source
Au cas où quelqu'un d'autre serait venu ici à la recherche d'une réponse à cette question, il existe une fonction API Windows appelée
GetProcessTimes()
. Il ne ressemble pas à trop de travail pour écrire un petit programme C qui démarrerait la commande, ferait cet appel et renverrait les temps de traitement.la source
Ceci est un commentaire / éditer à gentil de Luke Sampson
timecmd.bat
et répondre àSur certaines configurations, les délimiteurs peuvent différer. Le changement suivant devrait couvrir au moins la plupart des pays occidentaux.
Les
%time%
millisecondes fonctionnent sur mon système après avoir ajouté que ","(* parce que le site n'autorise pas les commentaires anon et ne garde pas une bonne trace d'identité même si j'utilise toujours le même e-mail d'invité qui, combiné à l'ip ip6 et à l'empreinte digitale du navigateur, devrait être suffisant pour s'identifier de manière unique sans mot de passe)
la source
Voici ma méthode, pas de conversion et pas de ms. Il est utile de déterminer les durées d'encodage (limitées à 24 heures cependant):
la source
la source
Le script suivant utilise uniquement "cmd.exe" et génère le nombre de millisecondes entre la création d'un pipeline et la fin du processus précédant le script. c'est-à-dire, tapez votre commande et dirigez-la vers le script. Exemple: "timeout 3 | runtime.cmd" devrait produire quelque chose comme "2990". Si vous avez besoin à la fois de la sortie d'exécution et de la sortie stdin, redirigez stdin avant le canal - ex: "dir / s 1> temp.txt | runtime.cmd" viderait la sortie de la commande "dir" vers "temp.txt" et imprimerait le runtime sur la console.
la source
call :calc
. Je l'ai fait ici. Le code de lien est plus agréable de cette façon. : DLa réponse de driblio peut être un peu plus courte (mais pas très lisible)
À la remarque de Luke Sampson, cette version est sans danger octal, bien que la tâche devrait être terminée en 24 heures.
la source
set _time=%time: =0%
résout le problème de l'heure à un chiffre - remplacez-le aux deux endroits.Dans le répertoire où se trouve votre programme, tapez
notepad mytimer.bat
, cliquez sur 'oui' pour créer un nouveau fichier.Collez le code ci-dessous, en le remplaçant
YourApp.exe
par votre programme, puis enregistrez.Saisissez
mytimer.bat
la ligne de commande, puis appuyez sur Entrée.la source
mon code vous donne le temps d'exécution en millisecondes, jusqu'à 24 heures, il est insensible aux paramètres régionaux et tient compte des valeurs négatives si le code s'exécute jusqu'à minuit. il utilise une expansion retardée et doit être enregistré dans un fichier cmd / bat.
avant votre code:
après votre code:
si vous voulez un temps d'exécution au format HH: mm: ss.000, ajoutez:
variable
t2
détient votre temps de course, vous pouvez l'echo %t2%
afficher.la source
Une fois que Perl a installé la solution d'embauche disponible, exécutez:
STDERR vient avant les secondes mesurées
la source
Utilisation d'un sous-marin pour renvoyer le temps en centièmes de seconde
la source
TIMER "Lean and Mean" avec format régional, prise en charge 24h et entrées mixtes
Adaptation du corps de la méthode de substitution d'Aacini , pas de IF, juste un FOR (mon correctif régional)
1: fichier timer.bat placé quelque part dans% PATH% ou le répertoire courant
Utilisation:
timer & echo start_cmds & timeout / t 3 & echo end_cmds & timer
timer & timer "23: 23: 23,00"
timer "23: 23: 23,00" & timer
timer "13.23.23,00" & timer "03: 03: 03.00"
timer & timer "0: 00: 00.00" no & cmd / v: on / c écho jusqu'à minuit =! Timer_end!
L'entrée peut maintenant être mélangée, pour ceux peu probables, mais les changements de format d'heure possibles pendant l'exécution
2: Fonction : minuterie fournie avec le script batch (exemple d'utilisation ci-dessous):
:: pour le tester, copiez-collez les sections de code au-dessus et en dessous
CE, DE et CS, DS signifient deux-points, un point et un ensemble de points, un ensemble de points - utilisé pour la prise en charge de formats mixtes
la source
Le script suivant émule * nix epoch time, mais il est local et régional. Il devrait gérer les cas de bord de calendrier, y compris les années bissextiles. Si Cygwin est disponible, les valeurs d'époque peuvent être comparées en spécifiant l' option Cygwin .
Je suis en EST et la différence signalée est de 4 heures, ce qui est relativement correct. Il existe des solutions intéressantes pour supprimer les dépendances TZ et régionales, mais rien de trivial que j'ai remarqué.
la source
Une solution utilisant du PHP pur pour cmd et un env. variable:
pas besoin de cygwin ou d'utilitaires non fiables. Utile lorsque PHP est disponible localement
la précision et le format de sortie peuvent être facilement modifiés
la même idée peut être portée pour PowerShell
la source