我正在尝试获取访问页面的总时间并使用此命令:
curl -o NUL -s -w "%%{time_total}" http://stackoverflow.com
我可以在命令提示符下显示总时间。
但是,现在我想把它放在这样的for循环中:
echo off
SET /a i=0
:loop
IF %i%==10 GOTO END
echo Iteration %i%.
SET /a i=%i%+1
GOTO LOOP
:end
并总结我得到的所有时间,用{/ p>之类的内容替换echo Iteration %i%.
set /a var = curl -o NUL -s -w "%%{time_total}" http://stackoverflow.com
set /a vartotal = var + vartotal
但当然这不起作用,我知道它的部分原因是返回的时间是十进制的,批处理不能处理小数。此外,URL中可能包含非字母字符,例如?,=和&。请帮忙
答案 0 :(得分:1)
最简单的方法是将curl命令的结果输出重定向到文件和该文件的进程。
这有点棘手,因为数字包含一个逗号(可能是你环境中的一个点),命令解释器只进行整数计算,在我的框中它解释了错误的数字。此外,如果数字从零开始,则认为它是一个OCTAL数字,所以你也必须剥离它。将所有这些添加在一起将为您提供此命令批处理脚本:
set site=http://stackoverflow.com
set file=so.log
rem set this to , or . depending on your locale
set sep=,
set tot=0
del /Q %file%
rem add 10 values to the so.log file
for /L %%r in (1,1,10) do curl -o NUL -s -w "%%{time_total}\r\n" %site% >> %file%
rem read each line from the file
for /F %%a in (%file%) do call :sum "%%a"
goto :end
rem sum procedure takes a number as first parameter
:sum
set milli=%1
IF "%sep%"=="," set val=%milli:,=%
IF "%sep%"=="." set val=%milli:.=%
set val2=%val:"=%
rem strip 0 if that is the first char
rem otherwise the number is
rem considered to be octal
set lz=%val2:~0,1%
if @%lz%==@0 set val2=%val2:~1%
set /a "tot=tot+%val2%"
set milli=
set val=
set val2=
goto :EOF
:end
echo total time: %tot%
rem clean up
set sep=
set tot=
set site=
set file=