J'utilise habituellement
echo.|time & my_command & echo.|time
quand je n'ai rien d'autre à portée de main. Cela provoque une sortie comme celle-ci:
> echo. | time & ping -n 4 localhost> nul & echo. | time
L'heure actuelle est: 18: 42: 34,63
Entrez la nouvelle heure:
L'heure actuelle est: 18: 42: 37,68
Entrez la nouvelle heure:
Pas joli et peut être rendu plus joli en passant par findstr:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Si vous avez retardé l'expansion activée par défaut (ou démarré cmd avec /v:on
comme argument), vous pouvez également l'utiliser echo !time!
sans avoir à recourir à des hacks laids avec redirection d'entrée.
Si vous souhaitez utiliser un fichier batch, vous pouvez le faire comme ceci:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
J'ai ajouté une redirection vers nul pour stdout et stderr ici, car sinon il pourrait être difficile de trouver les lignes de début et de fin. Vous pouvez supprimer cela si cela ne vous concerne pas.
Mais de nos jours, j'utilise principalement TimeThis - qui a malheureusement été supprimé.
PowerShell propose également un moyen:
Measure-Command { my_command }
mais vous devez faire attention aux choses qui dépendent du répertoire de travail ou de la redirection. Pour que ceux-ci fonctionnent correctement, vous pourriez avoir besoin d'une petite ruse:
@echo off
setlocal enableextensions
rem Prepare current directory and command line so they
rem can be stuck into a single-quoted PowerShell string.
set "Dir=%CD:'=''%"
set "Cmd=%*"
set "Cmd=%Cmd:'=''%"
rem Prepare command to pass to PowerShell
set Command=
set "Command=&{"
set "Command=%Command% Set-Location '%Dir%'"
set "Command=%Command%; [Environment]::CurrentDirectory = '%Dir%'"
set "Command=%Command%; $start = Get-Date"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host"
set "Command=%Command%; iex 'cmd /c %Cmd%'"
set "Command=%Command%; $end = Get-Date"
set "Command=%Command%; Write-Host"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host (' End time : ' + $end.ToString())"
set "Command=%Command%; Write-Host (' Elapsed time : ' + ($end - $start).ToString())"
set "Command=%Command%; }"
powershell -noprofile -command "%Command%"
endlocal
Cela peut être exécuté de la même manière que timethis
, assurez-vous d'échapper les guillemets doubles avec \"
s'ils sont nécessaires dans la ligne de commande (de même timethis
que également). La sortie produite est similaire. Les redirections ne fonctionneront pas, cependant.