Каковы значения ERRORLEVEL, установленные внутренним cmd.команды ехе?

ERRORLEVEL-это значение, возвращаемое большинством cmd.exe команды, когда они заканчиваются, что изменение в зависимости от ряда условий, поэтому зная значение, что команды возвращают ценную информацию, которая может помочь написать лучше пакетные файлы. Все внешнее .exe-программы изменяют уровень ошибок, когда они заканчиваются (это неотъемлемый механизм обоих ExitProcess и TerminateProcess функции API Win-32) и обычно такие значения документируются, но значения возвращается внутренние cmd.команды exe не полностью документированы в другом месте.

таблица с частичными значениями ERRORLEVEL отображается в этот вопрос, но только для внутренних команд, которые устанавливают ERRORLEVEL=0 "после успеха". Я предложил OP такого вопроса изменить его, чтобы также включить значения, возвращаемые "не успешными командами", но он отказался и предложил мне опубликовать мой собственный вопрос/ответ, так что вот он! Обратите внимание, что уровень ERRORLEVEL отличается от нуля делает не обязательно означает, что команда провалилась! Есть некоторые команды, которые заканчиваются без ошибок и возвращают значение больше нуля, чтобы указать другой "статус выхода", включая внутренние команды (например,SET /P).

чтобы лучше использовать встроенный cmd.команды exe в пакете .файлы bat нам нужно знать значения уровня ошибок, которые они возвращают, и механизмы, участвующие в этом управлении. Итак, вопрос в том, что внутренний cmd.исполняемый команды установите ERRORLEVEL в любое значение (включая ноль)?

1 ответов


в этом ответе значения ERRORLEVEL, возвращаемые всеми внутренними cmd.команды exe описаны; они сгруппированы по способу изменения значения и представлены в виде кратких справочных таблиц. Я рассмотрел другие подобные таблицы, чтобы собрать этот, но заполнил недостающие значения с помощью тестов, выполненных на компьютере Windows 8.1. Я приложил все усилия, чтобы создать эти таблицы полными и точными, но я не тестировал все значения, представленные здесь, поэтому это может быть тонким неточности.

Таблица 1-команды, которые не изменяют Предыдущее значение ERRORLEVEL

BREAK
ECHO
ENDLOCAL
FOR      Not change the ERRORLEVEL by itself. See "Exit Code" below.
IF       Not change the ERRORLEVEL by itself.
PAUSE
RD       Not change the ERRORLEVEL on errors, but the "Exit Code". See below.
REM
RMDIR    Same as RD.
SET      Plain SET command (no arguments). See "Table 3" below.
TITLE

Таблица 2-команды, которые устанавливают ERRORLEVEL в 0 или 1 в зависимости от результата

Command │ Set ERRORLEVEL = 0 when       │ Set ERRORLEVEL = 1 when
────────┼───────────────────────────────┼─────────────────────────────────────────────────────────────
CD      │Current directory was changed. │Directory not exists or is not accessible.
CHDIR   │Same as CD.                    │
COLOR   │Color was changed.             │Background and foreground colors are the same.
COPY    │File(s) was processed.         │File not found or bad parameters given.
DATE    │Date was changed or not given. │User has no admin privileges.
DEL     │Almost always, excepting when: │Bad or no parameters given.
DIR     │Same as COPY.                  │
ERASE   │Same as DEL.                   │
MD      │Directory was created.         │Directory could not be created.
MKDIR   │Same as MD.                    │
MKLINK  │Link was created.              │Link could not be created or bad parameters given.
MOVE    │File(s) was moved/renamed.     │File not found, could not be moved/renamed or bad parameters.
PUSHD   │Same as CD.                    │+ Bad switch given.
REN     │Same as MOVE.                  │
RENAME  │Same as MOVE.                  │
SETLOCAL│New environment was created.   │Bad parameters given.
TIME    │Time was changed or not given. │User has no admin privileges.
TYPE    │Same as COPY.                  │
VERIFY  │Right or no parameters given.  │Bad parameters given.
VOL     │Volume label was displayed.    │Drive not found or bad parameters given.

Таблица 3-команды, устанавливающие уровень ERRORLEVEL на error; в противном случае не изменяйте его

Command      │E│ Set ERRORLEVEL to = when
─────────────┼─┼────────────────────────────────────────────────────────────────────────
ASSOC        │*│1 = Extension associations could not be changed.
CLS          │ │1 = Bad switch given.
DPATH        │*│1 = Data path could not be established.
FTYPE        │*│1 = File type associations could not be changed.
GOTO label   │ │1 = Label not exist *in a subroutine* (equivalent to: EXIT /B 1).
KEYS         │ │1 = Bad switch given.
PATH         │*│1 = Path could not be changed.
POPD         │ │1 = Bad switch given.
PROMPT       |*│1 = Prompt could not be changed.
SET var      │*│1 = No variable with such name exists.
SET var=value│*│1 = Variable name start with "/" not enclosed in quotes.
SET /P       │*│1 = Read an empty line or at end of file.
SET /A       │*│1073750988 = Unbalanced parentheses, 1073750989 = Missing operand, 
             │ │1073750990 = Syntax error, 1073750991 = Invalid number,
             │ │1073750992 = Number larger than 32-bits, 1073750993 = Division by zero.
SHIFT        │ │1 = Bad switch given.

столбец "E" в таблице 3 указывает те команды, которые изменяют свое поведение в соответствии с " расширениями" состояние, описанное в соответствующей документации. Когда расширения включены (по умолчанию), и эти команды помещаются в файл с