计时命令行工具的最简单方法

计时命令行工具的最简单方法

计时命令行工具最简单/最快的方法是什么?

它不需要非常精确(+/- 秒就可以了),因为我预计这会花费几分钟甚至 1 小时以上。编写批处理文件也可以。此外,它不需要按时进行计算,只需显示开始时间和结束时间即可。

答案1

我通常使用

echo.|time & my_command & echo.|time

当我手头没有其他东西时。这会导致如下输出:

> echo。|时间&ping-n 4 localhost>nul&echo。|时间
当前时间为:18:42:34,63
输入新时间:
当前时间为:18:42:37,68
输入新时间:

不太漂亮,可以通过管道传输到 findstr 变得更漂亮:

echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current

如果您默认启用了延迟扩展(或使用作为/v:on参数启动 cmd),您也可以直接使用,echo !time!而不必诉诸输入重定向的丑陋黑客。

如果您想使用批处理文件,您可以这样做:

@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%

我在这里为 stdout 和 stderr 添加了重定向到 nul 的功能,因为否则可能很难找到开始和结束行。如果您不关心这一点,可以将其删除。

但现在我主要使用时间这个– 遗憾的是,现在已被删除。

PowerShell 也提供了一种方法:

Measure-Command { my_command }

但你需要小心那些依赖于工作目录或重定向的东西。为了使它们正常工作,你可能需要一点小技巧:

@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

这可以以与 相同的方式运行,如果命令行中需要timethis双引号,请务必使用 进行转义(也与 相同)。产生的输出类似。但是,重定向不起作用。\"timethis

答案2

您可以使用系统调度程序为您运行该命令。

控制面板->计划任务->创建新....

只需将计划任务指向您想要运行的命令,它就会执行您想要的操作。

如果您想创建一个存储时间状态信息的日志文件,您可能需要考虑执行与上述脚本类似的操作。

我使用一个名为“now”的实用程序来执行此操作,因为它会回显日期和时间。这对于您想要在日志文件中跟踪但缺乏本机包含日期/时间的智能的命令行脚本非常方便。非常方便,因为它不关心响应,当您完成后它就会消失。

现在可以在这里找到实用程序

脚本示例将是...

echo -------------- >>logfile.txt
now Process Starting>> logfile.txt
<commandhere> <target> >> logfile.txt
now process Ending >> logfile.txt
echo -------------- >> logfile.txt

示例输出如下

--------------
Mon Mar 06 14:58:48 2009 Process Starting
GNU Super Duper Process PID 12345! Success
Mon Mar 06 21:47:01 2009 Process Ending
--------------

答案3

另一个选择是使用time命令/t,将当前时间放到控制台(或重定向到日志)而不提示设置时间。但它有一个限制,即它会提供小时、分钟,但不提供秒和毫秒。

call time /t  > myLog.log
call mybat   >> myLog.log
call time /t >> myLog.log

答案4

In command prompt:
 wmic path win32_operatingsystem get LocalDateTime
 wmic path win32_operatingsystem get LocalDateTime
 wmic path win32_operatingsystem get LocalDateTime

Output:
C:\Users\Steini> wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.370000+000

C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.525000+000

C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.627000+000

15.5ms 和 10.2ms(使用剪贴板中的 Ctrl + v)

相关内容