是否有一种内置的方法来测量Windows命令行上命令的执行时间?


当前回答

因为其他人建议安装像免费软件和PowerShell这样的东西,你也可以安装Cygwin,它可以让你访问许多基本的Unix命令,比如time:

abe@abe-PC:~$ time sleep 5

real    0m5.012s
user    0m0.000s
sys 0m0.000s

不知道Cygwin增加了多少开销。

其他回答

PowerShell为此提供了一个cmdlet,称为Measure-Command。您必须确保在运行PowerShell的机器上是可用的。

PS> Measure-Command { echo hi }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 1318
TotalDays         : 1.52546296296296E-09
TotalHours        : 3.66111111111111E-08
TotalMinutes      : 2.19666666666667E-06
TotalSeconds      : 0.0001318
TotalMilliseconds : 0.1318

Measure-Command捕获命令的输出。你可以使用Out-Default将输出重定向回控制台:

PS> Measure-Command { echo hi | Out-Default }
hi

Days              : 0
...

正如Makotoe所评论的那样,Measure-Command返回一个TimeSpan对象,因此测量的时间被打印为一堆字段。你可以使用ToString()将对象格式化为时间戳字符串:

PS> (Measure-Command { echo hi | Out-Default }).ToString()
hi
00:00:00.0001318

如果Measure-Command中的命令改变了控制台文本的颜色,使用[console]::ResetColor()将其重置为正常。

呵呵,最简单的解决办法可能是:

echo %time%
YourApp.exe
echo %time%

这适用于所有开箱即用的Windows。


在应用程序使用控制台输出的情况下,将开始时间存储在临时变量中可能会很方便:

set startTime=%time%
YourApp.exe
echo Start Time: %startTime%
echo Finish Time: %time%

这是对Luke Sampson的nice timecmd.bat的评论/编辑并回复

出于某种原因,这只给我整秒的输出…这对我来说毫无用处。我的意思是,我运行timecmd pause,结果总是1秒,2秒,4秒……甚至是0.00秒!Windows 7。- Camilo Martin 13年9月25日16:00

在某些配置上,分隔符可能不同。以下变化至少应该涵盖大多数西方国家。

set options="tokens=1-4 delims=:,." (added comma)

在添加','后,%time%毫秒在我的系统上工作

(*因为网站不允许匿名评论,没有很好地跟踪身份,即使我总是使用相同的客人电子邮件,结合ipv6 ip和浏览器指纹应该足以唯一识别没有密码)

这是凯西对答案的扩展。关于使用PowerShell中的Measure-Command:

您可以从标准的命令提示符调用PowerShell,如下所示: powershell -Command "Measure-Command {echo hi}" 这将消耗标准输出,但你可以通过从PowerShell添加| Out-Default来防止这种情况: 测量命令{echo hi | Out-Default} 或者从命令提示符: powershell -Command "Measure-Command {echo hi | Out-Default}"

当然,您可以自由地将其包装在脚本文件*中。Ps1或*.bat。

因为其他人建议安装像免费软件和PowerShell这样的东西,你也可以安装Cygwin,它可以让你访问许多基本的Unix命令,比如time:

abe@abe-PC:~$ time sleep 5

real    0m5.012s
user    0m0.000s
sys 0m0.000s

不知道Cygwin增加了多少开销。