Можно ли как-нибудь заставить его записать сбойный пинг, не избавляясь от: "| 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
). Это тайная утилита, на самом деле выживающая во многом, потому что ее нельзя просто заменить чем-то другим.