Availability using a for command in a batch file

Hi everyone,
Guys im having a problem with a batch file using a for statement.

I have a text file listing computer names called "c:\computers.txt"
A batch file called check.bat

When I run check.bat, I want it to read c:\computers.txt, and for each computer, check if it can be pinged or not, and write either:

<Computername>:  Down
or
<Computername>:  Up

to the file:
availability.txt

I just cant seem to get this working.

Any help greatly appreciated.

If for example, i have 3 systems in computers.txt, the output I get when running the batch file is:

IP address must be specified.
IP address must be specified.
IP address must be specified.

and in the availabilty.txt file, I get:

: Down
: Down
: Down


I dont know where im going wrong :>)
@echo off
for /f %%c in (c:\computers.txt) do ( CALL :GETINFO)
 
:GETINFO
Set Availability=
ping -n 2 -w 100 %1
IF ERRORLEVEL 1 GOTO UP
goto UP
 
:UP
Set Availability=Up
 
:DOWN
Set Availability=Down
 
echo %1: %Availability%>>availability.txt

Open in new window

LVL 1
Simon336697Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

sirbountyCommented:
Try this...
@echo off
setlocal enabledelayedexpansion
for /f %%c in (c:\computers.txt) do (
  call :GETINFO %%c
  echo %%c: !Availability!>>availability.txt
)
goto :eof
 
:GETINFO
if [%1]=[] goto :eof
Set Availability=
ping %1 -n 2 -w 100 
If %errorlevel%==1 goto DOWN
 
Set Availability=Up
goto :eof
 
:DOWN
Set Availability=Down

Open in new window

0
Simon336697Author Commented:
Hi sirbounty, hope you are well mate.
Sirbounty,

When i run your script, im getting the following mate :>)

=[] was unexpected at this time.
0
sirbountyCommented:
Try that once more...missed an = on line 10...
@echo off
setlocal enabledelayedexpansion
for /f %%c in (c:\computers.txt) do (
  call :GETINFO %%c
  echo %%c: !Availability!>>availability.txt
)
goto :eof
 
:GETINFO
if [%1]==[] goto :eof
Set Availability=
ping %1 -n 2 -w 100 
If %errorlevel%==1 goto DOWN
 
Set Availability=Up
goto :eof
 
:DOWN
Set Availability=Down

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Simon336697Author Commented:
Sirb,

That works great mate.
Great to see you on here as always Sirb :>)
0
sirbountyCommented:
Glad I could help once again. :^)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Windows Batch

From novice to tech pro — start learning today.