Сохранить результаты пинга в файл TXT - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать сценарий, который сохранит некоторую информацию о результатах проверки связи в текстовый файл.Единственная информация, которая мне действительно нужна, это дата, время, IP-адрес,% потерь и среднее время.Я смог сделать часть этой работы.

Я могу получить время и дату, чтобы сохранить в текстовом файле, но ничего больше.Другая проблема, с которой я сталкиваюсь, заключается в том, что когда я сохраняю его в текстовом файле, он сохраняет сотни результатов в файл.Я только хочу сохранить окончательный результат.Затем, когда я перезапущу файл, он добавит новую запись в текстовый файл.

Вот пример того, с чем я играл:

@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% - 0 мс,
06.07.2009: 20:18: 10.22.222.54 - 0% - 0 мс,

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Используйте цикл 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" Средний убыток ", но тогда скрипт будет работать только на английских версиях 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 1, Minimum, Maximum и Average всеодинаковы (тем не менее, этот сценарий принимает Average, поэтому, если вы используете что-то отличное от /n 1, результат все равно будет таким, как вы ожидаете)

0 голосов
/ 07 июня 2019

Если вам необходимо убедиться, что формат даты и времени всегда представлен одинаково, вы можете использовать этот файл .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
        )
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...