Официальная ссылка MS для cmd.exe% errorlevel% 9009

Поэтому я знаю по опыту, что запуск действительной программы из cmd.exe и проверка% errorlevel% вернут 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

Аналогично, пытаясь выполнить команду, которая не существует, а затем проверка на% errorcode% дает мне 9009:

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

C:\>echo %errorlevel%
9009

Я писал летные сценарии, и они всегда работали так. Тем не менее, кто-то задал вопросы о совместимости (как вперед, так и назад) этого метода, и я не могу найти официальную документацию от Microsoft, фактически определяющую 9009 как уровень ошибок, когда файл или программа не найдены. Ближайшим я пришел этот сайт (http://msdn.microsoft.com/en-us/library/ms681381(v=vs.85).aspx), который, к сожалению, перечисляет 9009 как ошибку DNS.

Кто-нибудь знает, где это поведение документировано Microsoft?

Ответ 1

Команда Exchange выпустила Средство общего поиска ошибок, которое будет переводить коды ошибок (в том числе HRESULT, что удобно) для вас. Выход для 9009:

# 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"

... так что вы ищете от cmdmsg.h.

Это не документация сама по себе, но, по крайней мере, официальная.

Ответ 2

Я тоже продолжал получать код ошибки 9009... однако, как только я объявил переменную для имени файла, которое искал в моем цикле For, ошибка исчезла...

В качестве примера... На моем сервере Windows эта пакетная команда DOS получит код ошибки 9009:

(ПРИМЕЧАНИЕ: я изменил имена папок пути)

FOR %%G IN ("\\oneserver\sharethis$\There1\sub2\P02\OUT\12345_*_stop.dat") DO (

    Echo Error = %errorlevel%
    IF %%G == "" (
        Echo NOT  found [  %%G  ]
    ) Else (
        Echo YES found  [  %%G  ]
    )
    ECHO.
)

Затем я объявлю имя файла, что ошибка исчезла... изменения, внесенные в код: (ПРИМЕЧАНИЕ: echo off/on не изменило ошибку)

echo off

Set FILE1=12345_*_stop.dat

FOR %%G IN ("\\SNOCAP02\FTP$\sap\TALX\P02\OUT\%FILE1%") DO (

    Echo Error = %errorlevel%
    IF %%G == "" (
        Echo NOT  found [  %%G  ]
    ) Else (
        Echo YES found  [  %%G  ]
    )
    ECHO.
)

Tito SPS