我目前正在制作一个bat脚本,以ping一个主机,并返回Packetloss百分比和avg。
我用/f来获得结果。
唯一的问题是,分组丢失和avg ms在两条不同的线路上。
为此,我使用子调用和findstr为每个变量设置一个变量。
但是,当im再次尝试调用变量时,它包含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发布于 2014-02-16 04:05:56
@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翻译是你的宝贝..。
发布于 2014-02-16 09:05:30
@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在需要的地方拆分行。在这一刻,我不能用另一种语言来测试它,但是这应该可以在很少的变化下起作用。
https://stackoverflow.com/questions/21806810
复制相似问题