我正在尝试批量生成一个计数器,到目前为止,我有这个
:timer
set time=0
:time
set /a time=%time%+1
ping localhost -n 2 >nul
goto time
问题是,我希望在同一个批处理文件中同时运行另一个事件。我怎么能这样做?
答案 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);