Echo%var%打印FINDSTR参数

时间:2014-02-16 03:11:26

标签: batch-file echo findstr

我正在制作一个bat脚本,ping一个主机,然后返回Packetloss百分比和avg ms。

我用/ f来获得结果。

唯一的问题是,数据包丢失和平均ms在两个不同的行上。

因此,我正在使用suballs和findstr为每个设置一个变量。

但是,当我试图再次调用变量时,它包含findstr命令的所有参数。

我该怎么办?

以下是代码:

@echo off
SETLOCAL
SET PingCMD=ping.exe -w 300 -n 1 127.0.0.1
FOR /f "tokens=3,6,9,10,11,12 delims=," %%A IN ('%PingCMD%') DO (

    call :GetLoss %%A
    call :GetAvg %%A

)
echo PacketLoss %loss%  Average %avg%
pause


:GetLoss
SET loss=%1 %2 %3 %4 ^| findstr "loss tab"
GOTO :eof

:GetAvg 
SET avg=%1 %2 %3 ^| findstr "Average Gennemsnit average gennemsnit"
GOTO :eof
EndLocal

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL
SET PingCMD=ping.exe -w 300 -n 1 127.0.0.1
FOR /f "tokens=3,6,9,10,11,12 delims=," %%A IN ('%PingCMD%') DO (

    call :GetLoss %%A
    call :GetAvg %%A

)
echo PacketLoss %loss%  Average %avg%
PAUSE
GOTO :eof


:GetLoss
IF "%1"=="Lost" SET loss=%2
GOTO :eof

:GetAvg 
IF "%1"=="Average" SET avg=%2
GOTO :EOF

翻译是你的宝贝......

答案 1 :(得分:0)

@echo off

    setlocal enabledelayedexpansion

    set "pingCMD=ping -w 300 -n 1 127.0.0.1"
    set "pct="
    set "avg="
    for /f "tokens=*" %%a in ('%pingCMD% ^| findstr /n /r /c:"([0-9]*%%" /c:"= [0-9]*ms" ') do (
        if not defined pct (
               for /f "tokens=2 delims=(%%"  %%b in ("%%a") do set "pct=%%b"
        ) else ( for /f "tokens=7 delims=,= " %%b in ("%%a") do set "avg=%%b" )
    )
    echo %pct% %avg%

在Google图片中搜索后,我发现德语ping输出将百分比放在一个单独的行中。同样的情况发生在我的西班牙语本地化窗口中,但不是在英语窗口中。

当本地化改变行时,首先for | findstr找到包含所需数据的两行。然后,根据该行,使用另一个for来分割所需的行。在这一刻,我无法用另一种语言测试它,但这应该只需要很少的改动。