windows - 将 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 毫秒,
解决方案
使用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
, Maximum
and Average
all are the same(这个脚本Average
仍然需要,所以如果你使用除 之外/n 1
的东西,输出仍然是你所期望的)
推荐阅读
- swift - 基于孙值的 Firebase 写入 (Swift)
- robotframework - 如何在 Robot 框架中用两行代码编写代码
- c# - RabbitMQ 公开的公钥中包含的证书链
- angular - 在 Angular 6 中使用 SSL 时如何配置 TLS?
- postgresql - 简单的 postgres 函数
- python-2.7 - 使用 Python Oracle 和 Javascript 的网站
- android - StackNavigator 中的 TabNavigator - React Native
- angular - 如何通过逐页加载数据来使 ngx-datatable 更快?
- android - 如何使微调器显示第二次选择的值
- android - 如何在 android xamarin 中调用菜单电源?