Por que o comando ping no meu arquivo de lote é executado em um loop?

7

Eu criei um arquivo .BAT no Windows 7 que possui a seguinte linha:

PING XXX.XXX.XXX.XXX -t

(XXX substitui o número IP real). No entanto, quando clico duas vezes nesse arquivo em lote, posso ver o comando ping repetidamente sendo executado em um loop. Eu até tentei renomear o ping.BAT para ping.CMD , mas o resultado é o mesmo.

Eu quero evitar escrever comando ping através do prompt de comando, razão pela qual eu criei o arquivo em lotes. Eu não sei porque o comando ping está sendo chamado continuamente quando a mesma instrução é colocada em um arquivo de lote.

    
por pradeetp 18.06.2011 / 05:42

8 respostas

14

É um pouco incerto qual é exatamente o problema que você enfrenta, já que você não fornece nenhuma saída ou captura de tela do que não gosta, mas explicarei os dois problemas mais prováveis que vejo:

Dado que seu script é chamado ping.bat e se parece com isso:

 ping example.com

o intérprete ( cmd.exe ) pesquisa / investiga os caminhos na variável de ambiente %PATH% para algo que se parece com ping ... e faz isso acrescentando cada sufixo de %PATHEXT% que contém algo como %código%. Assim, chamar apenas .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC do ping leva a uma pesquisa por ping.bat ping.com ping.exe e assim por diante. O interpretador encontrará um ping.bat no diretório de trabalho atual (seu ping.bat ) e o chamará.

Então, você terá uma recursão legal aqui: ping.cmd executa a primeira linha, pesquisa por " ping ", encontra" ping.cmd ", executa a primeira linha, procura por" ping ", encontra" ping.cmd ", executa a primeira linha, procura por" ping ", encontra" ping.cmd "...

O segundo problema que você pode ter é o seguinte:

O intérprete do arquivo de lote geralmente repetirá os comandos que você gravou no arquivo .bat / .cmd. Assim, algo como este ping.bat será parecido com isto:

 C:\Users\XYZ\Desktop>ping www.superuser.com

 Ping wird ausgeführt für superuser.com [64.34.119.12] mit 32 Bytes Daten:
 Antwort von 64.34.119.12: Bytes=32 Zeit=110ms TTL=46
 Antwort von 64.34.119.12: Bytes=32 Zeit=107ms TTL=46

Se você quiser se livrar de ping www.superuser.com na saída do script, será necessário preceder cada linha com um C:\Users\XYZ\Desktop>ping www.superuser.com (por exemplo, '@ping www.superuser.com') no script ou coloque um @ antes do grupo de linhas de comando que você deseja executar "silenciosamente".

TL; DR; Não chame seus arquivos bat da mesma forma que os programas existentes.

    
por 26.01.2012 / 15:28
11

Eu tive o mesmo problema,

ping.bat continha várias linhas de comando ping

ping host1
ping host2
ping host3
...

a saída no shell do cmd ficou como abaixo e continuou em um loop e até o break com ctrl + C

c:\ping host1    
c:\ping host1    
c:\ping host1    
c:\ping host1    
c:\ping host1
...

c:\ping host1
^CTerminate batch job (Y/N)?

Para resolvê-lo, basta renomear o ping.bat , para que ele não se chame no arquivo de lote ou use ping.exe como o comando no arquivo de lote

ping.exe host1
ping.exe host2
ping.exe host3
...
    
por 26.01.2012 / 15:05
3

O parâmetro -t faz o ping contínuo.

Talvez remova o parâmetro -t e informe ao seu script em lote que espere que você pressione enter antes de matar a tela cmd.

Não usa janelas há algum tempo, mas isso deve funcionar:

ping xxx.xxx.xxx.xxx
pause
exit
    
por 18.06.2011 / 05:57
3

Eu tive os mesmos problemas. Aqui está a resolução:

Renomeie o arquivo ping.bat para pingtest.bat

E certifique-se de que contém:

ping xxx.xxx.xxx.001
ping xxx.xxx.xxx.002
ping xxx.xxx.xxx.003
pausar

Isso permitirá que você faça ping em um ou vários endereços e mostrará os resultados na tela. Este arquivo de lote pode ser executado em qualquer lugar no seu PC clicando duas vezes nele.

    
por 29.11.2013 / 10:08
1

A execução do script local parece impedir que o ping.exe seja executado em um script. Tente clicar com o botão direito e "executar como administrador". Estou pesquisando como atualizar a política de execução.

Quando achei que sabia algo sobre o Windows, eles mudaram.

Atualização: a recursão é a resposta ...

Você não pode chamá-lo ping.bat e chamar ping.exe

Você também não pode chamá-lo route.bat e chamar route.exe.

por exemplo, quando eu executo o ping.bat, depois executo-o novamente como pingx.bat:

    
por 26.01.2012 / 15:44
1

Clique com o botão direito - Executar como administrador funcionou para mim.

    
por 20.08.2013 / 18:31
-1

É porque você nomeia o arquivo em lote da mesma forma que o comando ping é nomeado. Renomeie seu arquivo em lotes para outra coisa. Etc .: myping.bat

    
por 15.02.2015 / 16:10
-2

Em outras palavras, não nomeie seu arquivo de lote (ping) . Use qualquer outro nome de arquivo desejado. E o código a seguir funcionará perfeitamente.

@echo off
PING XXX.XXX.XXX.XXX
pause
    
por 07.03.2014 / 22:53