2011-09-29 7 views
2

디렉토리에서 0 바이트 파일 수를 얻기 위해 일괄 처리를 실행하려고합니다. 카운트가 하나 이상이면 파일을 삭제하고 싶습니다. 그렇지 않으면 종료합니다. 여기까지 내가 지금까지 가지고있는 것이있다.0 바이트 파일 수를 얻기 위해 일괄 처리

@echo off 
if "%~z1" == "" (
    echo File does not exist. 
) else if "%~z1" == "0" (
    echo File is empty. 
) else (
    echo File is non-empty. 
) 

답변

4

(편집, 주석을 참조하십시오. 아래 원래 대답을.) 개수보다 큰 0를 밝혀지면

다음 스크립트는 다음 디렉토리에 빈 파일을 계산, 빈 파일을 삭제합니다. 디렉토리는 배치 스크립트의 매개 변수로 지정됩니다. 당신이 C:\Users\DS\Downloads의 디렉토리를 처리해야하는 경우 예를 들어,이 같은 스크립트를 호출 (script.bat 가정하면 스크립트 파일의 이름입니다) :

@ECHO OFF 

IF "%~1" == "" (ECHO Usage: %~nx0 path\to\files& GOTO :EOF) 

SET "workdir=%~1" 

SET count=0 
SET "command=SET /A count+=1" 
CALL :processempty 
ECHO Number of empty files: %count% 

IF %count% GTR 0 (
    ECHO Deleting files... 
    SET "command=DEL ^"%%~F^"" 
    CALL :processempty 
) 
GOTO :EOF 

:processempty 
FOR %%F IN ("%workdir%\*") DO (
    IF "%%~zF" == "0" %command% 
) 

:

script.bat C:\Users\DS\Downloads 

이것은 스크립트입니다 원래 응답은 다음과 같습니다.

@ECHO OFF 
SETLOCAL 
SET firstfile= 
SET delfirstfile= 
FOR %%F IN (*) DO (
    IF "%%~zF" == "0" (
    IF DEFINED firstfile (
     ECHO DEL "%%F" 
     SET delfirstfile=1 
    ) ELSE (
     SET "firstfile=%%F" 
    ) 
) 
) 
IF DEFINED delfirstfile ECHO DEL "%firstfile%" 
ENDLOCAL 

위의 스크립트는 다음과 같이 작동

  1. 그것은 현재 디렉토리에있는 모든 파일을 반복하고 자신의 크기를 확인합니다.

  2. 첫 번째 빈 파일이 발견되면 해당 이름이 변수에 저장됩니다.

  3. 이후의 모든 빈 파일이 삭제되고 다른 변수가 첫 번째 빈 파일도 삭제되어야 함을 나타내도록 설정됩니다.

  4. 표시기 변수가 점검 된 후. 설정되어 있으면 첫 번째 빈 파일이 삭제됩니다.

ps. 이 스크립트를 먼저 실행하여 올바르게 작동하는지 확인하는 것이 좋습니다. 그 후에 스크립트가 실제로 파일을 제거하게하려면 두 개의 DEL 명령 앞에 각각 ECHO을 제거해야합니다.

+0

고맙습니다. 이 프레임 워크에서 작동해야합니다. 디렉토리는 c : \ Users \ DS \ Downloads가되어야합니다. 다음과 같은 if 문이 필요합니다 ..... count> = 1이면 "elseif count = 0"을 삭제 한 다음 아무 것도하지 않습니다. –

+0

@ ME-dia : 처음에는 빈 파일 수만 계산하고 삭제할 것인지 결정하십시오. 아마도 디렉토리를 두 ​​번 반복해야 할 것입니다. 확실합니까? 또한 작업 디렉토리를 어떤 방식으로 설정 하시겠습니까? 예를 들어, 스크립트를 호출하기 직전에'CD로'할 수 있습니까? –

+0

예! 그게 전부 야. 빈 파일 만. CD는 괜찮을거야. 카운트가 1 이상인 경우 작은 C++ 애플릿을 호출합니다. 그렇지 않으면 0이 아니라면 아무 것도 수행하지 않기 때문입니다. 고맙습니다. –