Вопрос об уровне ошибок пакетного файла Windows
-
19-09-2019 - |
Вопрос
У меня есть пакетный файл, который анализирует несколько имен файлов из текстового файла и объединяет их в один сильный - это обсуждалось ранее. здесь.Однако я не хочу, чтобы строка содержала файл, если файл выдает ошибку, когда я запускаю его с помощью какой-либо команды (например, проверки VCS).Вот моя попытка:
set FILE_LIST=
for /f %%x in (temp.txt) do (
:: perform a VCS test
accurev diff -b %%x
:: skip concatenation if error level is > 2
IF errorlevel 2 GOTO NEXT
:: perform the concatenation
set FILE_LIST=!FILE_LIST! %%x
:NEXT
:: print a message if here due to an error above
IF errorlevel 2 echo VCS problem with this file: %%x
)
Проблема в том, что сценарий прекращает выполнение всего цикла for, как только обнаруживает один уровень ошибки больше 2.Если в списке пять файлов и у третьего проблема с VCS - скрипт обрабатывает только первые два.
Решение
setlocal ENABLEDELAYEDEXPANSION
set FILE_LIST=
for /f %%x in (temp.txt) do (
accurev diff -b "%%~x"
IF errorlevel 2 (
echo VCS problem with this file: %%~x
) ELSE (
set FILE_LIST=!FILE_LIST! %%x
)
)
Другие советы
Если у Errorlevel Condurse есть одна странная функция ...Он возвращает true, если код возврата был равен или выше, чем указанный ErronLevel.
Ссылка эта ссылка чтобы понять, как бороться с этой «особенностью».