定时命令行工具最简单/最快的方法是什么?
它不必是非常精确的(+/-秒就可以),因为我预计这将花费几分钟甚至1小时以上。并且编写批处理文件也很好。另外,它不需要按时进行计算,只需显示开始时间和结束时间即可。
定时命令行工具最简单/最快的方法是什么?
它不必是非常精确的(+/-秒就可以),因为我预计这将花费几分钟甚至1小时以上。并且编写批处理文件也很好。另外,它不需要按时进行计算,只需显示开始时间和结束时间即可。
Answers:
我通常在使用
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
也是如此)。产生的输出是相似的。重定向将不起作用。
timethis
。
您可以使用系统调度程序为您运行命令。
控制面板->计划任务->创建新...。
只要将计划任务指向您要运行的命令,它就可以执行您想要的操作。
如果要创建一个存储时间状态信息的日志文件,则可能需要考虑做与上述脚本类似的事情。
我使用名为“ 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
--------------
如果您拥有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())";
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
Far Manager 1.x用户可以考虑使用Timer插件。