2010-06-14 4 views
2

특정 Visual Studio 도구 체인에서 Windows 배치 파일을 사용하여 특정 디렉터리에 파일 목록을 만든 다음 "findstr"을 사용하여이 목록을 이름에 특정 문자열이 들어있는 파일로만 줄입니다. 그런 다음이 파일들에 대해 몇 가지 작업을 수행합니다.Windows 배치 파일이 파일이> 0 바이트인지 어떻게 감지합니까?

dir /b \mypath\*.wav >wavRawList.txt 

findstr /b /v "DesiredString" wavRawList.txt >wavListWithDesiredString.txt 

for /f %%a in (wavListWithDesiredString.txt) do (

    [... do some stuff ...] 

) 

의 다양한 거기 스튜디오 자주 배치 파일에서 오류를보고, 나는 wavListWithDesiredString.txt 자주 0의 길이의 파일되는 끝 있기 때문에 생각 비주얼 "경우가 wavListWithDesiredString.txt 존재"여기서 "exist"대신에 "존재하고 파일 길이가 0보다 큰"것을 의미하는 명령을 사용할 수 있습니다. for 사용

답변

5

더 또는 덜 인라인 방법 :

for %%x in (wavListWithDesiredString.txt) do if not %%~zx==0 (
    ... 
) 

또는 당신은 서브 루틴을 사용할 수 있습니다

:size 
set SIZE=%~z1 
goto :eof 

이 같이 호출 할 수 있습니다

call :size wavListWithDesiredString.txt 
if not %SIZE%==0 ... 
0

질문의 파일 크기 부분을 another stack overflow question found here으로 해결할 수있었습니다. 나는 아래의 예와 같이 AND 연산자를 시뮬레이션하기 위해 중첩을 사용 :

IF EXIST %1 IF %~z1 GTR 0 ECHO Both conditions are satisfied. 

% 1 배치 파일로 전달해야하는 매개 변수입니다.

0
IF EXIST %1 IF %~z1 GTR 0 ECHO Both conditions are satisfied. 
파일이이 부분을 존재하지 않는 경우 때문에

이 작동하지 않습니다 : "%는 ~ Z1 GTR 0 경우"해결에 잘못된 명령 및 결과이다 "GTR 0 IF"

0 was unexpected at this time. 

지연된 확장은 도움이되지 않습니다. 수정하려면 다음을 사용하십시오.

if exist %1 (
    echo "Ouput file exists, checking size" 
    for %%x in (%1) do if not %%~zx==0 (
     echo "File exists, size is non zero" 
     ... DO SOMETHING ... 
    ) else (
     echo "Size is zero" 
    ) 
) else (
    echo "There is no file" 
) 
관련 문제