Windows – Why does the ping command in the batch file execute in a loop

batch filepingwindows 7

I created a .BAT file in Windows 7 that has the following line:

PING XXX.XXX.XXX.XXX -t

(XXX replaces the actual IP number). However, when I double click on this batch file, I can see the ping command repeatedly being executed in a loop. I even tried to rename the ping.BAT to ping.CMD but the result is the same.

I want to avoid writing ping command through the command prompt, which is why I created the batch file. I don't know why the ping command is being continuously called when the same statement is put in a batch file.

Best Answer

It is a bit unclear what is exactly the problem you face since you don't provide any output or screenshot of what you don't like, but I'll explain the two most likely problems I see:

Given your script is called ping.bat and looks like this:

 ping example.com

then the interpreter (cmd.exe) searches/probes the paths in the environment variable %PATH% for something that looks like ping ... and it does that by appending each suffix from %PATHEXT% which contains something like .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC. so, calling just ping from the ping.batleads to a search for ping.com ping.exe ping.bat and so on. The interpreter will find a ping.bat in the current working directory (your ping.bat) and calls it.

So, you will have a nice recursion here: ping.cmd executes the first line, searches for "ping", finds "ping.cmd", executes the first line, searches for "ping", finds "ping.cmd", executes the first line, searches for "ping", finds "ping.cmd" ...

The second problem you might have is this:

The interpreter of the batch file will usually repeat the commands you have written to the .bat/.cmd file. Thus something like this ping www.superuser.com will look like this:

 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

If you want to get rid of C:\Users\XYZ\Desktop>ping www.superuser.com in the output of the script then you have to either prepend each line with an @ (for example, '@ping www.superuser.com') in the script or place a @echo off before the bunch of command lines you want to execute "quietly".

TL;DR; Don't call your bat files the same as existing programs.

Related Question