Какой самый простой способ сбросить ошибку до нуля?
-
12-09-2019 - |
Вопрос
У меня есть событие после сборки, которое запускает некоторые команды для 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
Я использую его в течение годов осла.