registro CMD de nenhuma resposta do comando ping

1

Estou escrevendo um script para fazer ping de WAPs e Switches dentro de uma escola e tudo o que está sendo executado é muito importante, pois não canalizará nenhuma resposta para um arquivo .txt porque eu adicionei

| FIND "TTL="


Este é basicamente o meu script, além de linhas mutlipple para todos os IP's

@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


quando executo o script com a parte "FIND" do script, recebo esta saída

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

mas se eu não obtiver uma resposta do que eu estou ping, ele não vai fazer um registro dele no arquivo .txt. Existe alguma maneira que eu possa obtê-lo para gravar um ping com falha sem ter que se livrar de: "| FIND" TTL=""?

    
por Super Geoff 11.08.2014 / 09:42

2 respostas

0

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.

    
por 11.08.2014 / 09:57
0

Solução alternativa

Pesquise . em vez de TTL= :

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

Como você não está procurando por um texto específico, esse método deve funcionar na maioria das localidades do Windows, capturando várias mensagens de erro sem esforço extra.

Exemplo de saída

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:

A solicitação expirou

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

Host de destino inacessível

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:

Falha geral

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

Transmissão falhou

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

Não foi possível encontrar o host

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

Leitura adicional

por 11.08.2014 / 11:10