2009-10-01 7 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

각 반복마다 errorlevel이 재설정되지 않은 것 같습니다. 루프의 끝에서 수동으로 0으로 재설정 할 수 있습니까? –

+0

mmyers : [internets의 조언] (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

ERRORLEVEL 건설 한 이상한 특징이있는 경우 리턴 코드가 같거나 지정된 오류 수준보다 높은 있다면 ... 그것은 TRUE를 반환합니다.

참조 this link "기능"을 처리하는 방법을 이해해야합니다.

+0

그게 내가 여기서 다룰거야.이 실행 파일 (accurev)의 유일한 "좋은"오류 수준은 0 또는 1이므로 2 이상의 값을 잡아야한다. 나는 그것이 오류를 잡을 때 for-loop를 빠져 나가는 것이 왜 나타나는 지 혼란 스럽다. – dls