Какой самый простой способ для reset ERRORLEVEL равняться нулю?

У меня есть событие post-build, которое запускает некоторые команды для проекта С#. Последняя команда иногда приводила к тому, что значение ERRORLEVEL не равно нулю, а затем сбой сборки.

Я хочу добавить дополнительную строку команды, чтобы всегда устанавливать значение ERRORLEVEL в ноль. Каков наиболее удобный способ сделать это?

Ответ 1

Я обнаружил, что "exit 0" выглядит как хороший способ справиться с этой проблемой.

Пример использования:

NET STOP UnderDevService/Y

выход 0

если служба UnderDevService не запущена.

Ответ 2

если вы используете exit /b 0, вы можете вернуть errorlevel 0 из дочернего пакета script, не выходя из родителя.

Ответ 3

Кажется, делает трюк:

ver > nul

Не все работает, и непонятно почему. Например, следующее:

echo. > nul
cls > nul

Ответ 4

В событии pre-or post-build, если код возврата исполняемого файла больше нуля, а вызов исполняемого файла не является последней строкой события pre-or post-build, быстрый способ отключения звука он и не запускать проверку для ненулевого errorlevel означает следовать линии сбоя с линией, которая явно возвращает ноль:

cmd /c "exit /b 0"

Это, по существу, общая комбинация ранее упомянутых решений, которые будут работать не только с последней строкой события до или после сборки.

Ответ 5

Я использую VERIFY или VERIFY > nul

Ответ 6

Я лично использую это:

cd.

Работает даже в unix-оболочке.

Но это может быть немного быстрее:

type nul>nul

Поскольку Process Monitor отображает вызовы QueryDirectory на cd.

PS: cd. имеет еще один приятный побочный эффект в оболочке unix. Он восстанавливает восстановленный рабочий каталог в терминале, если он был открыт до удаления.

Ответ 7

Если это фрагмент, например "Событие после сборки" и т.д., тогда вы будете хорошо добавлены:

(...) || ver > nul

в конце последней команды.

В качестве альтернативы

cmd /c "exit /b 0"

очень чистый и неидиоматический - читатель, который знает оболочку Windows, будет знать, что происходит, и каковы были ваши намерения.

Однако, если вы в пакете script, вы можете использовать субтроины, которые являются легким эквивалентом "дочерней партии script" из ответа akf.

Есть подпрограмма:

:reset_error
exit /b 0

а затем просто

call :reset_error

где вам это нужно.

Вот полный пример:

@echo off
rem *** main ***

call :raise_error
echo After :raise_error ERRORLEVEL = %ERRORLEVEL%

call :empty
echo After :empty ERRORLEVEL = %ERRORLEVEL%

call :reset_error
echo After :reset_error ERRORLEVEL = %ERRORLEVEL%

:: this is needed at the end of the main body of the script
goto:eof

rem *** subroutines ***

:empty
goto:eof

:raise_error
exit /b 1

:reset_error
exit /b 0

Какие выходы:

After :raise_error ERRORLEVEL = 1
After :empty ERRORLEVEL = 1
After :reset_error ERRORLEVEL = 0

Как вы видите - просто вызов и возврат через goto: eof недостаточно.

Ответ 8

Добавьте >nul после каждой команды, которая, вероятно, завершится неудачей - это, по-видимому, предотвратит сбои сборки.

Вы все еще можете проверить результат команды, исследуя %errorlevel%.

Например:

findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it)

Ответ 9

Я использую это:

ping localhost -n 1 > null

Ответ 10

Я всегда использовал;

set ERRORLEVEL=0

Я использую его для ослов.