批量 - 计数定时器

时间:2014-12-06 01:12:46

标签: batch-file timer

我正在尝试批量生成一个计数器,到目前为止,我有这个

:timer
set time=0
:time
set /a time=%time%+1
ping localhost -n 2 >nul
goto time

问题是,我希望在同一个批处理文件中同时运行另一个事件。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您是否想要计算执行批处理脚本所需的时间?如果安装了PowerShell,则可以使用Measure-Command cmdlet。

将其另存为timeit.bat

@echo off
>~timeit-%~n1.bat echo(%*
powershell "Measure-Command {Start-Process ~timeit-%~n1.bat -Wait}"
del ~timeit-%~n1.bat

然后,当你想要执行某些事情时,比如systeminfo,只需timeit systeminfo


如果您更喜欢非PowerShell解决方案(因为PowerShell在每次Windows会话的第一次运行中需要几秒钟的时间来启动自身),这里是一个更快的批处理/ JScript混合解决方案(more info)。它还在同一窗口中执行命令,而powershell解决方案为您的命令生成一个新窗口。将其另存为timer.bat

@if (@a==@b) @end   /*  begin multiline JScript comment

:: timer.bat command args
:: measures execution time of a command
@echo off & setlocal

if "%~1"=="" (
    echo Usage: %~nx0 command args
    goto :EOF
)
cscript /nologo /e:JScript "%~f0" %*
goto :EOF

:: end batch portion / begin JScript */
var osh = new ActiveXObject('wscript.shell'), cmd = [], b4 = new Date();

for (var i=0; i<WSH.Arguments.length; i++) {
    var arg = WSH.Arguments(i);
    cmd.push(/\s/.test(arg) ? '"' + arg + '"' : arg);
}

var exe = osh.Exec('cmd /c ' + cmd.join(' '));
while(!exe.StdOut.AtEndOfStream) WSH.Echo(exe.StdOut.ReadLine())

var x = (new Date() - b4) / 1000,
    d = Math.floor(x / 86400),
    d = d ? d + ' days ' : '',
    h = ('0' + (Math.floor(x / 3600) % 24)).slice(-2),
    m = ('0' + (Math.floor(x / 60) % 60)).slice(-2),
    s = Math.floor(x % 60) + x % 1,
    s = (s < 10) ? '0'+s : s;

WSH.Echo('\r\nExecution completed in ' + d + h + ':' + m + ':' + s);