Как отфильтровать результаты команды CMD? - PullRequest
0 голосов
/ 27 марта 2020

Я делаю простой пакетный скрипт ping. И я хотел бы отфильтровать вывод CMD, используя команду ping. Обычно вывод ping будет выглядеть следующим образом:

C:\WINDOWS\system32>ping 8.8.8.8

Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=21ms TTL=52
Reply from 8.8.8.8: bytes=32 time=25ms TTL=52
Reply from 8.8.8.8: bytes=32 time=19ms TTL=52
Reply from 8.8.8.8: bytes=32 time=17ms TTL=52

Но я бы хотел отфильтровать размер пакетов в ttl и изменить текст ответа. Чтобы это выглядело примерно так:

C:\WINDOWS\system32>ping 8.8.8.8

Pinging 8.8.8.8 with 32 bytes of data:
Reply: time=21ms 

Я обнаружил в этом сообщении, что я должен быть в состоянии сделать это с аргументом awk -F, однако, пытаясь это сделать в моем сценарии просто закрывает окно CMD при открытии. Как я могу делать то, что хочу?

Мой сценарий прямо сейчас:

@ECHO OFF


:PING
cls & set /p address=Host to ping: 
@echo Started pinging at: %time%

ping %address%  /t  & echo. & pause. & goto :PING

1 Ответ

2 голосов
/ 27 марта 2020

Основываясь на предоставленной вами информации, вот быстрый пример использования FOR /F, , как указано в разделе комментариев .

@Echo Off

:PingIt
ClS
Set /P "IP=Host to ping: "
Echo "%IP%"|"%__AppDir__%findstr.exe" "\"[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\"">NUL^
 ||GoTo PingIt
Echo Started pinging at: %TIME%
For /F "Tokens=1-7,9" %%G In (
    '""%__AppDir__%PING.EXE" %IP%|"%__AppDir__%findstr.exe" "ms$ data""'
)Do If "%%N"=="" (Echo(%%G %%H %%I %%J %%K %%L %%M)Else Echo Reply: time=%%N
Pause

Код включает в себя: проверка «лучше, чем ничего» ввода вашего конечного пользователя, прежде чем пытаться использовать его в качестве IP-адреса. Он также включает в себя необязательную команду Pause, предназначенную только для отображения выходных данных до закрытия окна cmd.exe, (зависит от вашего метода вызова сценария) .

Обратите внимание что в примере не учитываются ответы, не прошедшие проверку связи, например Request timed out.. Эти случаи выходят за рамки вашего вопроса, поэтому я предоставил вам возможность разобраться с самим собой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...