根据字符串匹配批量提取字符串(删除匹配的字符串)

时间:2013-01-21 19:16:43

标签: windows batch-file

我有一个字符串

Approximate round trip times in milli-seconds:
    Minimum = 133ms, Maximum = 150ms, Average = 142ms

和for循环

for /l %%x in (1, 1, 10) do (
    for /f "tokens=7,9" %%a in ('ping -n 10 !ipaddr!') do (
        if "x%%a"=="xAverage" (

如果第7个令牌(%a)是“平均”,那么我想检查if /I %%b GTR 300。但为此,我需要摆脱ms142ms)中的%b。我该怎么办?

2 个答案:

答案 0 :(得分:3)

使用延迟扩展

setlocal enabledelayedexpansion

并分配给循环中的临时变量:

set avg=%%b
set avg=!avg:ms=!

然后使用!avg!

答案 1 :(得分:1)

你必须什么都不做(只需消除IF命令中的/ I开关)。因为数字也是字符串,所以您可以直接进行所需的比较并获得正确的结果:

if 142ms GTR 300 echo This not appear: 142ms is less than 300
if 350ms GTR 300 echo This appear: 350ms is greater than 300

当平均值精确到300毫秒时,唯一的问题就出现了,但是这种情况很容易解决,将值改为301:

if 300ms gtr 300 echo This appear but is wrong: 300ms is equal 300, not greater 
if %%b gtr 301 echo OK: This appear when the value is greater 300 in all cases

安东尼奥