我正在制作一个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
答案 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
来分割所需的行。在这一刻,我无法用另一种语言测试它,但这应该只需要很少的改动。