将ping结果保存到TXT文件

时间:2019-06-07 16:54:12

标签: windows batch-file cmd

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

我可以获取保存到文本文件的时间和日期,但没有其他信息。 我遇到的另一个问题是,当我确实将其保存到文本文件时,它已将100多个结果保存到该文件中。我只希望它保存最终结果。然后,当我重新运行文件时,它将在文本文件中添加一个新条目。

以下是我一直在玩的游戏的一个示例:

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

这是保存到文本文件时的外观:

  

06/07/2019:21:54:10.22.222.54-0%-0ms,
  06/07/2019:20:18:10.22.222.54-0%-0ms,

2 个答案:

答案 0 :(得分:1)

使用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,"查找包含%(必须与另一个%进行转义)和/或字符串ms,的行-正是这两行, 我们需要)。您也可以使用`findstr“ Average 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%

注意:对于ping -n 1MinimumMaximumAverage来说都是相同的(尽管此脚本需要Average,所以如果您使用其他比/n 1,输出仍然是您期望的结果)

答案 1 :(得分:0)

如果需要确保始终以相同的方式显示日期和时间格式,则可以使用此.bat文件脚本来调用PowerShell脚本。将这两个脚本放在同一目录中。

=== pip.bat

powershell -NoLogo -NoProfile -File "%~dp0pip.ps1" >pip.txt

=== pip.ps1

$Computers = @('localhost', 'asdfa')
foreach ($Computer in $Computers) {
    if ($tc = Test-Connection -ComputerName $Computer -Count 1 -ErrorAction SilentlyContinue) {
        ForEach-Object {
            "{0} : {1} : {2} - {3}% - {4}" -f @(
                (Get-Date -f "MM/dd/yyyy")
                , (Get-Date -f "HH:mm")
                , $tc.Address
                , "0"
                , $tc.ResponseTime
            )
        }
    } else {
        "{0} : {1} : {2} - {3}% - {4}" -f @(
            (Get-Date -f "MM/dd/yyyy")
            , (Get-Date -f "HH:mm")
            , $Computer
            , "100"
            , 0
        )
    }
}