将卷曲输出写入批处理文件变量

时间:2014-08-08 19:37:46

标签: batch-file curl command-prompt

我正在尝试获取访问页面的总时间并使用此命令:

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中可能包含非字母字符,例如?,=和&。请帮忙

1 个答案:

答案 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=