Какой самый простой способ сбросить ошибку до нуля?

StackOverflow https://stackoverflow.com/questions/1113727

Вопрос

У меня есть событие после сборки, которое запускает некоторые команды для AC# Project. Последняя команда иногда приводит к тому, что значение ошибки не равно нулю, а затем сборка не удается.

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

Это было полезно?

Решение 4

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

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

Чистая остановка недооценка /у

Выход 0

Если служба недостатки не запускается.

Другие советы

Если вы используете exit /b 0 Вы можете вернуть errorlevel 0 из сценария партии ребенка без выхода из родителей.

Кажется, делает свое дело:

ver > nul

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

echo. > nul
cls > nul

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

cmd /c "exit /b 0"

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

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

cd .

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

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

type nul>nul

Потому что Process Monitor шоу QueryDirectory вызывает cd .

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

я использую VERIFY или же VERIFY > nul

Если это фрагмент, подобный «событию после сборки» и т. Д., То, что вы будете хорошо добавить:

(...) || ver > nul

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

Альтернативно

cmd /c "exit /b 0"

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

Однако, если вы находитесь в пакетном скрипте, вы можете использовать субротины, которые являются легким эквивалентом «сценария детского партии» из ответа 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 недостаточно.

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

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

Например:

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

Вот несколько других способов сбросить ErrorLevel Государство, которое даже работает в MS-DOS (по крайней мере для версии 6.22):

more < nul > nul

rem // The `> nul` part can be omitted in Windows but is needed in MS-DOS to avoid a line-break to be returned:
sort < nul > nul

Следующие методы работают только в MS-DOS:

command /? > nul

fc nul nul > nul

Ради полноты, это устанавливает ErrorLevel государство 1, действителен как для Windows, так и для MS-DOS:

< nul find ""

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

ping localhost -n 1> null

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

set ERRORLEVEL=0

Я использую его в течение годов осла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top