2009-10-01 5 views
0

У меня есть пакетный файл, который анализирует кучу имен файлов из текстового файла и объединяет их в один сингл - ранее обсуждалось here. Однако я не хочу, чтобы строка содержала файл, если файл выдает ошибку, когда я запускаю ее через некоторую команду (например, проверку VCS). Вот моя попытка:Вопрос об ошибке в пакетном файле Windows

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 
) 

Проблема в том, - сценарий, как представляется, прекратить выполнение цельного для цикла, как только он находит один Равно больше 2. Если есть пяти файлов в списке, а третьи из них имеет проблема VCS - скрипт обрабатывает только первые два.

+0

Похоже, что уровень ошибок не сбрасывается на каждой итерации. Можно ли вручную сбросить его до 0 в конце цикла? –

+0

mmyers: кажется, что [совет из интернетов] (http://batcheero.blogspot.com/2007/07/never-set-errorlevel.html) никогда не должен вручную устанавливать переменную errorlevel. – dls

+0

ahh - Я вижу, что форматирование гиперссылки не работает в комментариях. – dls

ответ

0
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

IF ERRORLEVEL конструкция имеет одну странную особенность ... она возвращает TRUE, если код возврата был равен или выше, чем указанного ERRORLEVEL.

Ссылка this link, чтобы понять, как бороться с этой «особенностью».

+0

вот что я здесь - для этого исполняемого файла (accurev) единственными «хорошими» уровнями ошибок являются 0 или 1, поэтому все выше 2 должно быть поймано. Я в замешательстве, почему он, похоже, выйдет из цикла for, когда он ловит ошибку. – dls

Смежные вопросы