Official MS reference for cmd.exe %errorlevel% 9009

有些话、适合烂在心里 提交于 2019-12-21 07:14:24

问题


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?


回答1:


The Exchange team put out 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.



来源:https://stackoverflow.com/questions/23091906/official-ms-reference-for-cmd-exe-errorlevel-9009

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!