Ich benutze normalerweise
echo.|time & my_command & echo.|time
wenn ich nichts anderes zur hand habe. Dies bewirkt eine Ausgabe wie die folgende:
> echo. | zeit & ping -n 4 localhost> nul & echo. | zeit 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 schön und kann durch Piping an findstr schöner gemacht werden:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Wenn Sie die verzögerte Erweiterung standardmäßig aktiviert haben (oder cmd mit /v:on
als Argument gestartet haben ), können Sie sie auch verwenden, echo !time!
ohne hässliche Hacks mit der Umleitung von Eingaben verwenden 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 eine Umleitung zu nul für stdout und stderr hinzugefügt, da es sonst schwierig sein könnte, die Start- und Endlinie zu finden. Sie können es entfernen, wenn dies für Sie kein Anliegen ist.
Heutzutage verwende ich meistens TimeThis, das leider leider entfernt wurde.
PowerShell bietet auch einen Weg:
Measure-Command { my_command }
Sie müssen jedoch auf Dinge achten, die auf das Arbeitsverzeichnis oder die Umleitung angewiesen sind. Damit diese korrekt funktionieren, benötigen Sie möglicherweise ein paar Tricks:
@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 dieselbe Art und Weise ausgeführt werden, indem Sie timethis
doppelte Anführungszeichen mit einschließen, \"
wenn sie in der Befehlszeile benötigt werden timethis
. Die Ausgabe ist ähnlich. Umleitungen funktionieren jedoch nicht.