2

我有一个字符串

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. 但为此我需要去掉msin 142ms( %b)。我应该怎么办?

4

2 回答 2

3

使用延迟扩展

setlocal enabledelayedexpansion

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

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

然后使用!avg!.

于 2013-01-21T19:20:06.443 回答
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

唯一的问题发生在 Average 正好是 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

安东尼奥

于 2013-01-22T04:22:01.827 回答