Solved

windows batch file error handling

Posted on 2008-11-02
19
2,506 Views
Last Modified: 2008-11-03
Can someone give me an example and explanation of how to write error handling capabilities in a windows batch file?
0
Comment
Question by:dchau12
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 5
  • 5
  • +1
19 Comments
 
LVL 4

Expert Comment

by:Kaddict
ID: 22862085
Here's a couple links about ERRORLEVEL which will help you handle error codes :

http://www.robvanderwoude.com/errorlevel.html
http://www.allenware.com/icsw/icsw020.htm
http://kennethhunt.com/archives/000933.html (search for errorlevel you'll find another example how to use it)

0
 

Author Comment

by:dchau12
ID: 22862137
thats nice...

I am trying this code but it do what I want it to.  the error level doesn't change even if an error occurs:

echo %errorlevel%
cd c:\doesnetexist
echo %errorlevel%

What I would really like is the following:
if %errorlevel%>0 goto ERR

commands.....

:ERR
echo error has occured
Exit



0
 
LVL 70

Expert Comment

by:Qlemo
ID: 22862148
If you are only interested in success/fail, it's often better to use command chaining:

(echo x | findstr x >nul) && echo found it
(echo x | findstr y >nul) || echo not found
 
0
Portable, direct connect server access

The ATEN CV211 connects a laptop directly to any server allowing you instant access to perform data maintenance and local operations, for quick troubleshooting, updating, service and repair.

 
LVL 70

Expert Comment

by:Qlemo
ID: 22862156
Which Windows version?
0
 
LVL 4

Expert Comment

by:Kaddict
ID: 22862158
Your error is that you can't use  " > " because in dos this is the REDIRECT command

paste my code into a new test.cmd file and you'll see that it works
To run it go into dos and type test to run the script where you saved it

-kaddict

@echo off
cls
echo %errorlevel%
cd c:\doesnetexist
echo %errorlevel%
if %errorlevel% GTR 0 goto ERR
 
echo Should not see this!
 
:ERR
echo Error has occured!!!!!

Open in new window

0
 
LVL 4

Expert Comment

by:Kaddict
ID: 22862162
Info about GTR and more of his friends (
EQU - equal
     NEQ - not equal
     LSS - less than
     LEQ - less than or equal
     GTR - greater than
     GEQ - greater than or equal
)

can be found there : http://www.computerhope.com/if.htm
0
 

Author Comment

by:dchau12
ID: 22862166
I dont think that code is correct Kaddict.  The error level started at 1 and after the error was still 1.  So, the error level never changed.
0
 

Author Comment

by:dchau12
ID: 22862170
The window version is xp pro version 2002 service pack 2
0
 
LVL 4

Expert Comment

by:Kaddict
ID: 22862172
true. we're missing one more little thing here :)
0
 
LVL 70

Expert Comment

by:Qlemo
ID: 22862175
I for myself would prefer this:


cd c:\doesnetexist || goto ERR
 
echo Never have to see this
goto :EOF
 
:ERR
echo Error!

Open in new window

0
 

Author Comment

by:dchau12
ID: 22862183
um... that worked.

Can you please explain a bit more?  will this work for every error?
0
 
LVL 70

Accepted Solution

by:
Qlemo earned 500 total points
ID: 22862193
Yes, it works for all errors reflecting in a changed errorlevel. But you can not differentiate for the error code, besides you store the stderr output in a file and process it later.
Example:

cd c:\doesnotexist 2>cd.error || (echo Error occurred, the detail is | type cd.error)

0
 
LVL 4

Expert Comment

by:Kaddict
ID: 22862199
If you ever still want it to work the ERRORLEVEL way, here's something that works:

I downloaded the script ERRORLEVEL.bat from http://www.robvanderwoude.com/files/errlevel.zip and extracted it on my D:\

Then on my D:\> prompt I typed :

cd \
errorlevel
(the script returns ERRORLEVEL 0)
cd \doesnotexist
errorlevel
(the script returns ERRORLEVEL 1)
cd \
errorlevel
(the script returns back again ERRORLEVEL 0 so it's working)

But... the script ain't a line or two, its complicated and working up to 255 error levels so I would recommend using it if you want an ERRORLEVEL solution, but explaining it exactly wouldn't be easy =)

good luck,

-kaddict
0
 
LVL 4

Expert Comment

by:Kaddict
ID: 22862211
Of course I agree that Qlemo's looks way better than using ERRORLEVEL which is old and not simple to use.
0
 
LVL 70

Expert Comment

by:Qlemo
ID: 22862244
However, little typo in my example:

cd c:\doesnotexist 2>cd.error || (echo Error occurred, the detail is & type cd.error)
0
 
LVL 96

Expert Comment

by:Lee W, MVP
ID: 22862733
I don't agree with the selected solution on this.  While errorlevel can do what you want, there's an easier way when it comes to checking for files and folders -

If NOT EXIST C:\DOESNOTEXIST GOTO ERRORS
0
 

Author Comment

by:dchau12
ID: 22867171
Define easier, because Qlemo's way works just fine.
0
 
LVL 4

Expert Comment

by:Kaddict
ID: 22872330
It is true that leew's solutions applies more to the specific problem, and by easier I guess he mean that it's easier to understand, but the already-accepted solution works and applies to more conditions that file/directory existing...

(and here goes the debate xD)

Nice day too all

-kaddict
0
 
LVL 96

Expert Comment

by:Lee W, MVP
ID: 22872430
Easier - Qlemo's way is a multistep process:

first do something, then check for the error.

Using If Not Exist (or If Exist) allows for the entire process in one line.

For example, lets say I want to copy a file to the folder c:\myfolder.

Using Errorlevel:

cd /d c:\myfolder
if %errorlevel% == 1 md c:\myfolder
cd /d c:\myfolder
copy c:\myfile.txt c:\myfolder

Using If [NOT] Exist:

If not exist c:\myfolder md c:\myfolder
copy c:\myfile.txt c:\myfolder


As I said, using ErrorLevel can do what you want, but it's not the most appropriate solution to non-existent files/folders.  If you want to learn batch programming, you need to be aware of when to use what methods.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to record audio from input sources to your PC – connected devices, connected preamp to record vinyl discs, streaming media, that play through your audio card: Vista, Windows 7, Windows 8, Windows 8.1 and Windows 10 – both 32 bit & 64.
Determining the an SCCM package name from the Package ID
Windows 8 comes with a dramatically different user interface known as Metro. Notably missing from the new interface is a Start button and Start Menu. Many users do not like it, much preferring the interface of earlier versions — Windows 7, Windows X…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

732 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question