Is there any way I can get it to record a failed ping without having to get rid of: " | FIND "TTL=""?
Não, pelo menos, não usar o comando stock find
da Microsoft.
Veja algumas documentações para find
, que no lado do cliente se aplicam ao Windows Vista e Windows 8 que afirma, em parte:
If you do not use /i, find searches for exactly what you specify for String.
Como você só pode especificar um String para procurar, não existe uma maneira direta de fazer o que você está tentando fazer.
Você pode, no entanto, fazê-lo de uma maneira um pouco indireta: redirecionar a saída de ping
para um arquivo temporário e executar find
duas vezes nesse arquivo:
ping -n %var1% 127.0.0.1 > Test.tmp
FIND "TTL=" Test.tmp > Test.txt
FIND "Request timed out." Test.tmp >> Test.txt
Ou você pode usar uma ferramenta que suporte a pesquisa de várias cadeias distintas, como o GNU grep
(que está disponível para o Win32). Uma abordagem alternativa apontada em um comentário por and31415 é usar findstr
, que está disponível no Windows 2000 e mais recente :
ping -n %var1% 127.0.0.1 | findstr /c:"TTL=" /c:"Request timed out."
Obviamente, como os dois operam observando a saída do idioma nativo de ping
, eles terão problemas com locais diferentes do inglês.
Vale lembrar que find
é originado no DOS 2.0 . Essa era a mesma versão do DOS que introduzia diretórios e suporte a disco rígido (o DOS 1.x só suportava o uso de diretórios). disquetes para armazenamento persistente, e faltava o conceito de diretórios). Como a compatibilidade com versões anteriores é algo que a Microsoft ainda leva muito a sério, eles não podem alterar facilmente como o find
trata o parâmetro String e, nos dias do DOS 2.0, a memória e a velocidade de processamento eram enormes prêmios. Parece que o find
no DOS 2.x nem sequer suportava pesquisa sem distinção entre maiúsculas e minúsculas (adicionado posteriormente com a opção /I
). É uma utilidade arcana, na verdade, sobrevivendo muito porque não pode ser substituída trivialmente por algo diferente.