2014-01-28 8 views
1

forfiles를 사용하여 폴더를 확인하여 업데이트 된 .xlsx 파일 (1 일 이내)을 확인한 다음 업데이트 된 파일의 존재 여부에 따라 다른 bat 파일을 실행하려고합니다.파일 루프/오류 수준 문제

처음에는이 작업을 수행하는 스크립트가 있었지만 언젠가는 여러 개의 새로운 .xlsx 파일이 있었기 때문에 스크립트는 "반복되어"success.bat 파일을 여러 번 실행합니다.

업데이트 된 파일이 없으면 cmd가 오류와 함께 종료되므로 fail.bat 파일을 실행하기 위해이 파일을 사용했습니다.

이것은 내가 지금 무엇을 가지고 :

@echo on 
set found=0 
forfiles /p C:\ /m *.xlsx /d 0 /c "cmd /k set found=1" 
if /i %found%==1 (
Call Success.bat 
) else (
if /i %found%==0 (
Call Fail.bat 
) 
PAUSE 

지금이 즉이 루프 문제를 제거한다 .. 파일이 업데이트 될 때를 위해 잘 작동합니다.

하지만 지금 cmd를 더 업데이트 된 파일이 발견되지 않으면 종료하고 더 이상 나를 위해 작동하지 않는 것

if ERRORLEVEL 1 call fail.bat 

를 사용하여 함께 문제를 가지고는 ... 나는이 경우 그냥 좋은 해요 오류 메시지가 표시되지 않습니다 .BAT 파일

답변

2
forfiles /p c:\ /m *.xlsx /d 0 2>nul && call Success.bat || call Fail.bat 

2>nul와/다른 물건, 당신은 또한 표준 출력 (forfiles에 의해 발견 된 모든 파일)을 억제하는 >nul를 추가 할 수 있습니다. 확장명이있는 파일이 없으면 오류 수준이 설정됩니다. || 다음의 명령은 오류 수준이 설정된 경우에만 발생합니다.

따라서 지정된 확장명의 파일이없는 경우이 파일은 Fail.bat을 호출하고 스크립트의 끝 부분으로 이동합니다. 파일이 발견되면 Success.bat이 호출됩니다.

+3

간단한 하나의 라이너로 단순화하지 않는 이유는 다음과 같습니다. forfiles ... && call success.bat || call fail.bat'을 호출하십시오. 또한'/ d 0' 옵션을 잊어 버렸습니다. – dbenham

+0

시도해 보니 "/ d 0"이 추가되어 Fail.bat를 실행하지만 파일을 찾으면 실행되지 않습니다 Success.bat – Slingy

+0

@dbenham 고마워요, 제 대답을 편집했습니다. 그것은 훨씬 좋네요. – unclemeat