1

Я пишу сценарий для проверки связи с WAP и коммутаторами в школе, и все, что работает на нем, отлично работает, за исключением того, что оно не отправит никаких ответов в .txt, потому что я добавил

| FIND "TTL="


Это в основном мой скрипт, кроме нескольких строк для всех IP

@echo off
del Test.txt
set /p var1=How many times would you like to test the connection for each device?
cls
echo Testing WAP Connections, Please Wait...
ping -n %var1% 127.0.0.1 | FIND "TTL=" > Test.txt


когда я запускаю скрипт с "НАЙТИ" часть скрипта, я получаю этот вывод

Reply from 127.0.0.1: bytes=32 time<1ms TTL=255

но если я не получу ответ от того, что я пингую, он не сделает запись этого в файле .txt. Можно ли как-нибудь заставить его записать сбойный пинг, не избавляясь от: "| FIND" TTL = ""?

2 ответа2

0

Можно ли как-нибудь заставить его записать сбойный пинг, не избавляясь от: "| FIND" TTL = ""?

Нет, по крайней мере, не используя команду find акций Microsoft.

Вот некоторая документация для find которая на стороне клиента относится к Windows Vista и Windows 8, в которой говорится, в частности:

Если вы не используете /i, найдите в поисках именно то, что вы указали для String.

Поскольку вы можете указать только одну строку для поиска, нет прямого способа сделать то, что вы пытаетесь сделать.

Однако вы можете сделать это немного окольным путем: перенаправить вывод команды ping во временный файл и дважды запустить команду find для этого файла:

ping -n %var1% 127.0.0.1 > Test.tmp
FIND "TTL=" Test.tmp > Test.txt
FIND "Request timed out." Test.tmp >> Test.txt

Или вы можете использовать инструмент, который поддерживает поиск нескольких различных строк, такой как GNU grep (который доступен для Win32). Альтернативный подход, указанный в комментарии and31415, заключается в использовании вместо этого findstr , который доступен в Windows 2000 и новее:

ping -n %var1% 127.0.0.1 | findstr /c:"TTL=" /c:"Request timed out."

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

Стоит помнить, что find возникла в DOS 2.0. Это была та же версия DOS, в которой были представлены каталоги и поддержка жесткого диска (DOS 1.x поддерживала только использование гибких дисков для постоянного хранения и не имела концепции каталогов). Поскольку обратная совместимость - это то, к чему Microsoft все еще относится достаточно серьезно, они не могут легко изменить то, как find обрабатывает параметр String , и в дни DOS 2.0 как память, так и скорость обработки были огромными. Похоже, что find в DOS 2.x даже не поддерживала поиск без учета регистра (добавленный позже с ключом /I ). Это тайная утилита, на самом деле выживающая во многом, потому что ее нельзя просто заменить чем-то другим.

0

Временное решение

. а не TTL=:

ping -n %var1% 127.0.0.1 | FIND "." > Test.txt

Поскольку вам не нужен конкретный текст, этот метод должен работать в большинстве языковых стандартов Windows, перехватывая несколько сообщений об ошибках без лишних усилий.

Пример вывода

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Ping statistics for 127.0.0.1:

Истекло время запроса

Pinging 1.2.3.4 with 32 bytes of data:
Request timed out.
Ping statistics for 1.2.3.4:

Хост назначения недоступен

Pinging 131.107.255.255 with 32 bytes of data:
Reply from 10.0.2.15: Destination host unreachable.
Ping statistics for 131.107.255.255:

Общий провал

Pinging 127.0.0.0 with 32 bytes of data:
General failure.
Ping statistics for 127.0.0.0:

Передача не удалась

Pinging 0.0.0.0 with 32 bytes of data:
PING: transmit failed. General failure.
Ping statistics for 0.0.0.0:

Не удалось найти хост

Ping request could not find host a.b.c.d. Please check the name and try again.

дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .