Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2517
  • Last Modified:

windows batch file error handling

Can someone give me an example and explanation of how to write error handling capabilities in a windows batch file?
0
dchau12
Asked:
dchau12
  • 7
  • 5
  • 5
  • +1
1 Solution
 
KaddictCommented:
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
 
dchau12Author Commented:
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
 
QlemoC++ DeveloperCommented:
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
QlemoC++ DeveloperCommented:
Which Windows version?
0
 
KaddictCommented:
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
 
KaddictCommented:
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
 
dchau12Author Commented:
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
 
dchau12Author Commented:
The window version is xp pro version 2002 service pack 2
0
 
KaddictCommented:
true. we're missing one more little thing here :)
0
 
QlemoC++ DeveloperCommented:
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
 
dchau12Author Commented:
um... that worked.

Can you please explain a bit more?  will this work for every error?
0
 
QlemoC++ DeveloperCommented:
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
 
KaddictCommented:
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
 
KaddictCommented:
Of course I agree that Qlemo's looks way better than using ERRORLEVEL which is old and not simple to use.
0
 
QlemoC++ DeveloperCommented:
However, little typo in my example:

cd c:\doesnotexist 2>cd.error || (echo Error occurred, the detail is & type cd.error)
0
 
Lee W, MVPTechnology and Business Process AdvisorCommented:
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
 
dchau12Author Commented:
Define easier, because Qlemo's way works just fine.
0
 
KaddictCommented:
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
 
Lee W, MVPTechnology and Business Process AdvisorCommented:
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: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 7
  • 5
  • 5
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now