Ich benutze normalerweise
echo.|time & my_command & echo.|time
wenn ich sonst nichts zur hand habe. Dies führt zu einer Ausgabe wie der folgenden:
> echo. | time & ping -n 4 localhost> nul & echo. | time
Die aktuelle Zeit ist: 18: 42: 34,63
Geben Sie die neue Zeit ein:
Die aktuelle Zeit ist: 18: 42: 37,68
Geben Sie die neue Zeit ein:
Nicht hübsch und kann durch Piping zu findstr schöner gemacht werden:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Wenn Sie die standardmäßig aktivierte Erweiterung verzögert haben (oder cmd mit /v:on
als Argument gestartet haben ), können Sie sie auch einfach verwenden, echo !time!
ohne auf hässliche Hacks mit Eingabeverleitung zurückgreifen zu müssen.
Wenn Sie eine Batchdatei verwenden möchten, können Sie dies folgendermaßen tun:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
Ich habe hier nul für stdout und stderr umgeleitet, da es sonst schwierig sein könnte, die Start- und Endzeilen zu finden. Sie können dies entfernen, wenn Sie dies nicht interessieren.
Aber heutzutage benutze ich meistens TimeThis - das leider inzwischen entfernt wurde.
PowerShell bietet auch einen Weg:
Measure-Command { my_command }
Sie müssen jedoch vorsichtig mit Dingen sein, die vom Arbeitsverzeichnis oder der Umleitung abhängen. Damit diese richtig funktionieren, benötigen Sie möglicherweise einen kleinen Trick:
@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
Dies kann auf die gleiche Weise ausgeführt werden wie timethis
, um doppelte Anführungszeichen zu vermeiden, \"
wenn sie in der Befehlszeile benötigt werden ( timethis
wie auch). Die erzeugte Ausgabe ist ähnlich. Umleitungen funktionieren jedoch nicht.