首页 > 解决方案 > 将 ping 结果保存到 TXT 文件

问题描述

我正在尝试构建一个脚本,它将一些 ping 结果信息保存到文本文件中。我真正需要的唯一信息是日期、时间、IP 地址、丢失百分比和平均时间。我已经能够完成这项工作的一部分。

我可以获得保存到文本文件的时间和日期,但没有别的。我遇到的另一个问题是,当我将它保存到文本文件时,它会将 100 条结果保存到文件中。我只希望它保存最终结果。然后,当我重新运行文件时,它会在文本文件中添加一个新条目。

这是我一直在玩的一个示例:

@echo on
SET ip=10.22.222.54
@echo. %date% at %time% to %ip%>>PingLogs.txt
ping %ip% -n 1 >>Logs.txt
stop

这是我希望它保存到文本文件时的样子:

2019 年 6 月 7 日:21:54:10.22.222.54 - 0% - 0 毫秒,2019 年 6 月 7 日
:20:18:10.22.222.54 - 0% - 0 毫秒,

标签: windowsbatch-filecmd

解决方案


使用for /f循环来捕获命令的输出。由于您的命令ping输出了几行,因此需要进行大量分析以找出正确的标记和分隔符以获取所需的部分。然后根据您的需要重新组装它们并循环:

@echo off
set "IP=www.google.de"
:loop
set "loss="
for /f "tokens=1,9 delims=( " %%a in ('ping -n 1 %IP% ^|findstr "%% ms,"') do (
    if not defined loss (set "loss=%%a") else (set "average=%%b")
)
echo %date% : %time% : %IP% - %loss% - %average%
goto :loop 

(注意:findstr "%% ms,"查找包含 a %(必须用另一个转义%)和/或字符串ms,的行 - 正是我们需要的两行)。您也可以使用 `findstr "loss Average",但该脚本仅适用于英文 Windows 版本。我喜欢让我的脚本尽可能地独立于语言。

输出:

07.06.2019 : 19:40:39,37 : www.google.com - 0% - 13ms
07.06.2019 : 19:40:41,25 : www.google.com - 0% - 13ms
07.06.2019 : 19:40:43,24 : www.google.com - 0% - 15ms
07.06.2019 : 19:40:45,25 : www.google.com - 0% - 13ms
07.06.2019 : 19:40:47,24 : www.google.com - 0% - 13ms

注意:日期/时间格式取决于区域设置 - 您的可能看起来不同。

注意:ping -n 1不要指望损失不是任何一个0%100%

注意:with ping -n 1, Minimum, Maximumand Averageall are the same(这个脚本Average仍然需要,所以如果你使用除 之外/n 1的东西,输出仍然是你所期望的)


推荐阅读