Какой самый простой способ сбросить ERRORLEVEL на ноль?

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

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

 Dykam11 июл. 2009 г., 16:02
Сборка действительно не дает сбоя, только IDE выглядит так.
 Arun21 авг. 2013 г., 00:54
Я понимаю, что это довольно старая публикация ... Мне удалось сбросить уровень ошибки до 0, введя команду "тип nul" после последней команды. Просто чувствовал, что это может быть полезно.

Ответы на вопрос(11)

Решение Вопроса

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

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

NET STOP UnderDevService /Y

exit 0

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

 30 нояб. 2011 г., 10:33
нет, если вы также хотите запустить этот командный файл из командной строки, так как выход 0 закроет окно. cmd / c "выход / b 0" как предложено ниже, намного лучше

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

 23 мар. 2015 г., 16:29
Из всех предложенных решений это, вероятно, будет лучшим. Я собираюсь бросить эту строку вresetErrorlevel.bat скрипт. В общем, тот факт, что нужно пойти на все, чтобы сделать что-то тривиальное, например, очистить уровень ошибок скрипта, является еще одним доказательством того, что изобретатель пакетного программирования Windows должен быть найден и наказан строго. ;)

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

set ERRORLEVEL=0

Я использую его уже много лет.

 04 дек. 2014 г., 17:55
Это легко, но это действительно плохая идея, так как это создает переменную с именемerrorlevel который перекрывает внутреннюю псевдопеременнуюerrorlevel
 04 дек. 2014 г., 18:11
Крики, ты прав! Ух ты, похоже, я уже несколько лет уклоняюсь от пуль :)
 17 янв. 2015 г., 04:06
Здесь же Cirrus! спасибо, джеб!

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

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

cd .

Работает даже в Unix Shell.

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

type nul>nul

Так какProcess Monitor шоуQueryDirectory призываетcd .

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

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

cmd /c "exit /b 0"

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

 09 июл. 2016 г., 08:18
Мне нравится этот метод дляsetting произвольный уровень ошибки, такой как:cmd /c "exit /b 9009", но это кажется немного излишним для установки его в 0. Не будетver > nul (внутренняя команда), работает так же хорошо с меньшими накладными расходами, чем загрузка другой копии командной оболочки сcmd /c "exit /b 0" ?
 14 нояб. 2018 г., 16:03
/b не нужно такcmd /c “exit 0” тоже отлично работает.
 30 нояб. 2011 г., 10:34
спасибо, это сработало для меня. более легкое звучание «выхода 0»; выше не сокращает его, так как я хочу продолжать делать вещи после сброса уровня ошибки, а не выхода
 12 июл. 2013 г., 23:40
еще больше фантазии: вы можете использовать<some failing command> || cmd /c "exit /b 0" как один лайнер.

Вот некоторые другие способы сброса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 ""

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

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

Например:

findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it)
 03 мар. 2016 г., 16:29
Это не сработает - оболочка оценивает всю командную строку сразу, поэтому% errorlevel% будет подставлен перед "findstr". Команда выполнена. Используйте & quot; если errorlevel 1 & quot; вместо этого, чтобы проверить ненулевой уровень ошибки.
 11 окт. 2016 г., 23:36
Возможно, ваш CI-сервер отказывает в сборке, если, например, он находит строку & quot; error & quot; в стандартном выводе / стандартная ошибка. Вы не сбрасываете статус. Вы просто заставляете команду замолчать. Для более глубокого молчания используйте & gt; nul 2 & gt; nul

Если это фрагмент кода, такой как «Событие после сборки», quot; и т. д., тогда вы будете в порядке, добавив:

(...) || ver > nul

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

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

cmd /c "exit /b 0"

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

Однако, если вы находитесь в пакетном скрипте, вы можете использовать подпрограммы, которые являются легким эквивалентом «дочернего пакетного скрипта». из ответа Акфа.

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

: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 недостаточно.

Кажется, чтобы сделать трюк:

ver > nul

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

echo. > nul
cls > nul
 11 июл. 2009 г., 17:28
Я дам вам это, но где же ver.exe?
 03 июн. 2014 г., 03:49
если вы запустите команду help в командной оболочке, вы увидите, что ver также является встроенной командой
 29 мая 2013 г., 18:40
В командной строке пакета "ver" возвращает версию MS Windows, например «Microsoft Windows [Версия 6.1.7601]».
 user9531911 июл. 2009 г., 15:43
Я думаю, что причина "эха" и "cls" не работают, потому что они являются встроенными командами оболочки, а не реальными программами.
 09 июл. 2016 г., 09:23
@BaiyanHuang - я почти уверен"ver" это внутренняя команда, но как вы можете сказать из"help" ? Многие из команд, перечисленных в"help" являются "внешними" такие команды, как:Find.exe, Findstr.exe, Help.exe, Subst.exe, Wmic.exe, Xcopy.exe, ...

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

ping localhost -n 1 & gt; null

 11 окт. 2016 г., 23:56
Также популярен как команда сна, когда n & gt; 1.

Ваш ответ на вопрос