batch-filecmderrorlevel

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?


Solution

  • 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.