Вопрос об уровне ошибок в пакетном файле Windows - PullRequest
0 голосов
/ 02 октября 2009

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

Ответы [ 2 ]

0 голосов
/ 02 октября 2009
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
    )
)
0 голосов
/ 02 октября 2009

ЕСЛИ конструкция ERRORLEVEL имеет один странная особенность ... он возвращает TRUE, если код возврата был равен или выше чем указанный уровень ошибки.

Ссылка эта ссылка , чтобы понять, как справиться с этой "функцией".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...