计时命令行工具最简单/最快的方法是什么?
它不需要非常精确(+/- 秒就可以了),因为我预计这会花费几分钟甚至 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)