Windows相当于UNIX“时间”命令


69

因此,Unix有一个time命令,可让用户计时自己的代码/其他时间。我想知道Windows命令行是否有类似内容。

另外,我在这里询问了有关Linux命令行的先前问题。我们可以在Windows上做同样的事情吗?如果是这样,怎么办?


2
Windows具有标准的cmd.exe,但是如果您想要更接近linux版本的文件,请使用Powershell,它的方式更好。
Guillermo Siliceo Trueba

我在Google上搜索的“ Windows命令时间”在第一个结果中给出:http
大卫·米歇尔

我在Windows 7上,只是尝试了上面发布的解决方案。我收到以下错误:Unable to query system performance data (c0000004)。我用谷歌搜索,其他人也有完全相同的问题,但是论坛建议没有解决方案。无论如何,谢谢你的建议。有人可以为其他部分提出建议吗?
efficiencyIsBliss

@eff,timeit.exe是Server 2003和XP据我所知,我不认为它兼容7
约翰牛逼

Answers:


57

使用Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

根据您的需要进行编辑@efficiencylsBliss:

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}

这是我尝试的内容:Measure-Command {java test <inputfile> -Wait}。我得到了与时间有关的统计信息列表,但没有得到代码的输出。难道我做错了什么?
efficiencyIsBliss

@efficiency:您忘记了该start-process命令。
2011年

开始过程:找不到接受参数'。\ 6-8.txt'的位置参数。在第1行:char:31 + Measure-Command {开始进程<<<< java。\ dancebattle。\ 6-8.txt -wait} + CategoryInfo:InvalidArgument:(:) [Start-Process],ParameterBindingException + FullyQualifiedErrorId :PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand`
efficiencyIsBliss

1
我正在尝试使用来衡量运行Python脚本所需的时间Measure-Command {start-process \Python27\python test.py -Wait}。这将打开一个新的cmd窗口来运行该进程,但是在运行完毕后将其关闭。我也希望看到脚本的输出,那么如何保持窗口打开?
John Peter ThompsonGarcés'13

2
@JohnPeterThompsonGarcés使用启动进程cmdlet的-NoNewWindow参数
mjsr 2013年

21

由于某些原因,我使用Win XP timeit.exe不适用于我。我找到了另一种选择 ptime

ptime 1.0-准确测量程序执行时间

ptime将运行任何指定的命令和参数,并以秒为单位测量执行时间(运行时间),精确到5毫秒或更短。它是一个自动过程计时器,或用于基准测试的程序计时器。


ptime有一个小错误。ptime始终返回0作为错误级别,即使“子”程序退出并出现错误
Yura Shinkarev

超级简单,准确的输出。
janpio

似乎在Win10中工作正常。
mivk 18/09/16

17

您可以使用批处理脚本作弊...

@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul

然后运行程序作为此脚本的参数...

计时器myprogram.exe

还有争论...

计时器“ myprogram.exe -sw1 -sw2”

示例输出:

17:59:20.02
some text
17:59:20.03

将批处理脚本放在PATH变量中的某个位置,例如C:\Windows\System32并命名为timer.cmd。当然,派生第二个cmd实例对性能的影响很小,尽管很小。


该提示将不起作用,@echo off echo %time% < nul cmd /c %1 echo %time% < nul 您在环境变量(?)上省略了结束%

诸如%1之类的命令行参数没有关闭%。这是你的意思吗?
Andrew J. Brehm

2
你为什么要重定向nul echoecho从不读取输入。
2014年

1
您可以更改cmd /c %1cmd /c %*,以便可以保存命令参数的引号
stanleyxu2005

3

time在Windows上没有直接等效于Unix的产品。

乔治亚大学为Unix用户提供Windows命令的简短列表

我觉得老版本的Windows命令提示符,相比Unix外壳脚本.BAT是相当有限的,但也有一些设施,遍历文件等CommandWindows.com有一些技巧

您既可以bash在Windows上安装(例如,通过安装CygWin),也可以学习Windows Powershell(我认为它可以做一些等效的事情)。


2

您的代码输出可以通过管道传递到文件: java test <inputfile> | Out-File d:\a.txt

要测量需要多长时间,您必须将其封装在Measure-COMMAND中:

Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}


2

如果尝试将PowerShell与Measure-Command一起使用,请注意可能会出现一些意外的陷阱。我的命令使用>重定向将二进制数据写入文件,但是PowerShell会在文件的开头添加BOM表,并在每次写入后添加CRLF换行符!


1

一些咖啡帮助我想到了这一点:

function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }

如果您不希望其输出任何内容,只需将其替换为out-null即可:

function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }

您可以这样使用它:

PS C:\> time sleep 5


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 990
Ticks             : 49906722
TotalDays         : 5,77624097222222E-05
TotalHours        : 0,00138629783333333
TotalMinutes      : 0,08317787
TotalSeconds      : 4,9906722
TotalMilliseconds : 4990,6722



PS C:\>

1

为了易于使用,这是巧克力包装:https : //chocolatey.org/packages/ptime C:/> choco install ptime

如果ptime这样做的好处是,它的行为类似于Unix版本并产生控制台输出,Measure-Command { XXX }但不会(或者至少我不知道该怎么做)。


0

有两个不同的选项来获取“时间”命令。我的喜好是仅安装Cygwin(与UNIX类似的time命令一起提供)。

另外,您可以编写一个脚本并将其添加到您的路径中(这样就可以在不指定整个路径的情况下执行它)。

如果您有可用的Powershell,请尝试以下脚本(调用文件-'。exe'等时有效):

$start = get-date
if ($args.length -gt 1) {
start-process $args[0] $args[1..$args.length] -workingdirectory $pwd -nonewwindow -wait
} else {
start-process $args[0] -workingdirectory $pwd -nonewwindow -wait
}
$end = get-date
$elapsed = $end - $start
write-host $end-$start
# datetime format
write-host $elapsed
# easy-to-read format
echo $elapsed

使用(例如)运行代码:

time.ps1 python program.py

使用Batch,我建议从此处(在Stackoverflow.com上)提出最重要的答案之一。两者都只需要复制粘贴。请注意,如果使用paxdiablo的解决方案,则应更换

ping -n 11 127.0.0.1 >nul: 2>nul: 

%*

0

如果您不仅需要命令的总运行时间,还需要进行行测量的行,那么gnomon是一个不错的解决方案:

命令行实用程序,用于将时间戳信息添加到另一个命令的标准输出中。对于长时间运行的过程很有用,您需要历史记录长时间的过程。

通过运行安装npm install -g gnomon,然后通过即可使用command | gnomon

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.