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


9

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

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


可能属于Stackoverflow。
乔伊,2009年

2
如果我必须对某些东西进行“编程”才能使其工作……解决方案太复杂了。为此必须有一些命令行工具或简单的批处理解决方案,不是吗?
slolife

Serverfault上的可能性更大。
Kirill V. Lyadvinsky

通常,操作系统只在乎它已使用了多少CPU时间。我的以下回答将满足您的要求。我只是使用一个日志文件来存储信息。
Axxmasterr

Answers:


19

我通常在使用

echo.|time & my_command & echo.|time

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

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

不漂亮,可以通过管道查找findstr:

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

如果默认情况下已延迟启用扩展(或使用cmd /v:on作为参数启动cmd ),则也可以使用echo !time!它,而不必借助输入重定向求助于难看的黑客。

如果要使用批处理文件,可以这样进行:

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

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

但是如今,我主要使用TimeThis –不幸的是,到目前为止,TimeThis已被删除。

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也是如此)。产生的输出是相似的。重定向将不起作用。


时间这是来自Windows 2000资源工具包,不再可用;2003年的Resource Kit是TimeIt,它在我的64位Win7上不起作用。对于一个PowerShell的解决方案见superuser.com/questions/228056/...
pesche

糟透了 不过,我仍然有旧时的可执行文件。
2014年

@pesche:我添加了一个批处理文件,可以代替timethis
2014年

4

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

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

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

如果要创建一个存储时间状态信息的日志文件,则可能需要考虑做与上述脚本类似的事情。

我使用名为“ 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
--------------

4

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

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

不幸的是,“时间/ t”不输出秒,而仅“小时:分钟/分钟”。
slolife,

是的,我已经更新了答案。
2009年

1

如果您拥有Powershell,则可以执行此操作(全部一行,为了便于阅读而分解):

PS C:\> $startTime=Get-Date;ping /n 4 localhost;$endTime=Get-Date;
        echo "Finished in $(($endTime-$startTime).ToString())"

或将其保存到文件中以方便重用。

# usage: .\timer.ps1 program [arguments]

$startTime = Get-Date;
$prog = $args[0];
$progargs = $args[1..($args.length-1)];

&$prog $progargs

$endTime = Get-Date;

echo "Finished in $(($endTime - $startTime).ToString())";

1
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

使用剪贴板中的Ctrl + v的15,5ms和10,2ms


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.