Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Official MS reference for cmd.exe %errorlevel% 9009

So I know from experience that running a valid program from cmd.exe and checking the %errorlevel% will return a 0:

C:\>dir logo.bmp
 Volume in drive C has no label.
 Volume Serial Number is 5283-A7A2

 Directory of C:\

05/22/2008  12:43 PM         1,440,054 logo.bmp
               1 File(s)      1,440,054 bytes
               0 Dir(s)  71,723,995,136 bytes free

C:\>echo %errorlevel%
0

Likewise, trying to execute a command that does not exist and then checking for the %errorcode% gives me a 9009:

C:\>idontexist.exe
'idontexist.exe' is not recognized as an internal or external command,
operable program or batch file.

C:\>echo %errorlevel%
9009

I've been writing batch scripts for years and they have always worked this way. However, someone has asked questions about compatibility (both forward and backward) of this technique and I can't find any official documentation from Microsoft actually defining 9009 as the errorlevel when a file or program is not found. The closest I've come is this site (http://msdn.microsoft.com/en-us/library/ms681381(v=vs.85).aspx) which, unfortunately, lists 9009 as a DNS error.

Does anyone know where this behavior is documented by Microsoft?

like image 951
AWT Avatar asked Apr 15 '14 18:04

AWT


People also ask

What is errorlevel 9009?

This is probably a batch (. bat, . cmd). A program called in the batch was not found, and Windows sets the %errorlevel% to 9009. Connect Direct will always return the current return code from a Run Task.

What is Errorlevel in batch file?

Batch file error level: %ERRORLEVEL% is an environment variable that contains the last error level or return code in the batch file – that is, the last error code of the last command executed. Error levels may be checked by using the %ERRORLEVEL% variable as follows: IF %ERRORLEVEL% NEQ 0 ( DO_Something )


1 Answers

Microsoft has a Common Error Lookup Tool that will translate error codes (including HRESULTs, which is handy) for you. The output for 9009 is:

# for decimal 9009 / hex 0x2331 :
  MSG_DIR_BAD_COMMAND_OR_FILE                                   cmdmsg.h       
# '%1' is not recognized as an internal or external command,
# operable program or batch file.
  SQL_9009_severity_10                                          sql_err        
# Cannot shrink log file %d (%s) because of minimum log space
# required.
  DNS_ERROR_RCODE_NOTAUTH                                       winerror.h     
# DNS server not authoritative for zone.
# for hex 0x9009 / decimal 36873 :
  SSLEVENT_NO_CIPHERS_SUPPORTED                                 lsapmsgs.mc    
# No suitable default server credential exists on this
# system. This will prevent
# server applications that expect to make use of the system
# default credentials
# from accepting SSL connections. An example of such an
# application is the directory
# server. Applications that manage their own credentials,
# such as the internet
# information server, are not affected by this.
# 4 matches found for "9009"

...so the one you're looking for is from cmdmsg.h.

It's not really documentation, per se, but it's at least official.

like image 157
Mark Avatar answered Oct 17 '22 04:10

Mark