【发布时间】:2021-05-27 17:58:21
【问题描述】:
我想执行 ping,并在评估输出后返回一行,如“0 - check_ping rta=1 loss=0”。
0 和 1 是从 ping 中提取的,当然。
我走了这么远:
@setlocal enableextensions enabledelayedexpansion
@echo off
set ip=%1
set num=%2
for /f "tokens=* delims= " %%f in ('ping -n %num% %ip%') do (
set line=%%f
call :processLine
)
echo 0 myTestService loss=!loss! rta=%rta:~1,-2% further information for myTestService
GOTO:EOF
:processLine
for /f "tokens=1,2,3,4,5,6 delims==(%%" %%A in ("%line%") do (
if "%%A" == "Packets: Sent " (
set loss = %%E
echo DD%%E
echo Loss is [!loss!]
)
if "%%A" == "Minimum " (
set rta=%%D
echo RTA is [!rta:~1,-2!]
)
)
它不起作用,我认为这是因为一些运行时问题。显然我不是 cmd 专家,但我读到这些 for 循环在设置变量和稍后访问它们方面可能会很棘手。
非常感谢任何帮助。
致以最诚挚的问候,亲爱的
【问题讨论】:
-
你没有
!loss!。你定义了!loss !。使用set命令删除=周围的所有空格。 -
这将有助于我们为您提供更有针对性的帮助,如果您要在edit 您的问题中包含一些示例
ping.exe输出,以便我们可以准确地确定您想要什么从中提取。您还应该打开命令提示符窗口,键入for /?,然后按[ENTER]键,以了解如何使用标记和分隔符。"tokens=* delims= "是错误的,"tokens=1,2,3,4,5,6 delims==(%%"也是如此。您可能还应该删除set line=%%f,使用call :processLine "%%f",并将%line%替换为%~1 -
谢谢你的解决方案,斯蒂芬。感谢您的建设性补充,Compo。
-
嗯,谁能告诉我在哪里将答案标记为解决方案?
-
没有人回答您的问题,他们只提供了可能帮助您解决问题和/或改进代码的 cmets。我建议你自己回答这个问题,展示你的新代码,并尽可能地解释它是如何做到的。您可以在发布后,并且已经过了足够的时间,也可以将您自己的答案标记为已接受的解决方案。
标签: parsing batch-file cmd ping