Принятый ответ - ИМО.В Robocopy уже определены коды выхода , поэтому мы можем обычно принимать любое значение 8
или меньше, что указывает на то, что все прошло хорошо.
"Любое значение больше 8указывает на то, что во время операции копирования произошел как минимум один сбой. "
Итак, допустим, ваша команда ROBOCOPY $(Source) $(Dest) *.*
, которую я буду называть $(RobocopyBinCommand)
.
В Visual Studio для вашего события перед сборкой или после сборки нажмите раскрывающийся список и выберите <Edit...>
Создайте новую строку под вашей командой, поместите IF %ERRORLEVEL% LEQ 8 EXIT 0
, затем примените и закройтеокно свойств, например:
Расширенные требования кода выхода
Допустим, вы хотите, чтобы сборка прошла, только если ROBOCOPY вернется 1
или 3
.Приведенная выше проверка if не позволит вам даже использовать OR
-подобное поведение, поддерживаемое CMD.exe, для устранения проблемы.Вы можете обойти это ограничение несколькими способами, но я думаю, что это один из самых лаконичных способов сделать это.мы передаем результат вывода уровня ошибки в findstr
, который ищет 1 или 3. Нам не нужно беспокоиться о значениях, имеющих 3 или 1, таких как 23
или 16
потому что первая оценка гарантирует, что значение равно 3 или меньше.После того, как эта оценка пройдена, если она действительно проходит, она передает уровень ошибки на findstr
, который затем сравнивает уровень ошибки с 1
или 3
.Если либо обнаружен findstr, findstr выйдет 0, в противном случае это не так.Если уровень ошибки не был равен 3 или меньше, уровень ошибки останется неизменным, и задача сборки выйдет из режима обычного использования 1 из ROBOCOPY.