Solved

windows batch file error handling

Posted on 2008-11-02
19
2,493 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
  • 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 68

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
 
LVL 68

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
Don't lose your head updating email signatures!

Do your end users still have the wrong email signature? Do email signature updates bore you or fill you with a sense of dread? You can make this a whole lot easier on yourself by trusting an Exclaimer email signature management solution. Over 50 million users do...so should you!

 
LVL 68

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 68

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 68

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 95

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 95

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

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Update 11/3/2014 - Although the below article will get you to relocate the WINSXS folder, Microsoft has finally released a utility to reduce the size of the WINSXS folder. For some reason, it's not that straightforward. It only works on Windows 2008…
Today, still in the boom of Apple, PC's and products, nearly 50% of the computer users use Windows as graphical operating systems. If you are among those users who love windows, but are grappling to keep the system's hard drive optimized, then you s…
The viewer will learn how to successfully create a multiboot device using the SARDU utility on Windows 7. Start the SARDU utility: Change the image directory to wherever you store your ISOs, this will prevent you from having 2 copies of an ISO wit…
Windows 8 came with a dramatically different user interface known as Metro. Notably missing from that interface was a Start button and Start Menu. Microsoft responded to negative user feedback of the Metro interface, bringing back the Start button a…

760 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now