2012-11-08 2 views
0

일괄 적으로 작성 하시길 바랍니다 :CMD 일괄 삭제 폴더

디스크 c : \에는 test라는 폴더가 있습니다. 이 폴더에 다른 이름을 가진 하위 폴더가 있습니다. 모든 하위 폴더를 반복하고 "Log"및/또는 "sqlite.sql"이라는 파일을 찾으려면 배치 명령이 필요합니다. 해당 파일의 크기가 <이거나 KB가 없거나 존재하지 않으면 프롬프트없이 모든 파일과 함께이 하위 폴더를 삭제하십시오.

for each sub in Test 
if Isfile("Log") or Isfile("sqlite.sql") and EachFileSizes > 0 Then 
Else 
Sub.delete 
End If 
next 

답변

1

이 문제에 대한 해결책은 하위 폴더의 위치에 따라 다릅니다. 그들은 모두 C 바로 아래에있는 경우 :

@echo off 
setlocal EnableDelayedExpansion 
cd C:\test 
rem Process all subfolders 
for /D %%a in (*) do (
    rem Initially, set to delete this subfolder 
    set delete=yes 
    rem Confirm that 
    for %%b in (%%a\Log %%a\sqlite.sql) do (
     set size=%%~Zb 
     if !size! gtr 0 set delete=no 
    ) 
    if !delete! equ yes (
     ECHO rd /S /Q %%a 
    ) 
) 

하위 폴더가 깊은 C 아래에 여러 수준을 존재하는 경우 : \ 테스트, 다음 솔루션 훨씬 더 (한 수준의 깊이) \ 테스트, 다음이 해결책이다 복잡합니다.

+0

1.이 예에서는 하위 폴더를 삭제하지 않고 "rd/S/Q 'foldername" " 다른 sqlite.sql 파일이 있으면 = 0 kb. Logic이 (가) 있어야합니다. log> 0이고 sqlite.sql이 존재하면 log = 0 또는 sqlite.sql 또는 로그 파일이 내부에 존재하지 않으면 삭제하고 하위 폴더는 그대로 둡니다. –

+0

1.이 솔루션은 아무 것도 삭제하거나 생성하지 않으며 단지 최종 결과 명령을 표시합니다. 이것에 만족하면,'ECHO'부분을 삭제하여 rd 명령을 실행하십시오. 2. 첫 번째 요청은 "파일 크기가 0KB 미만이거나 존재하지 않으면 Isfile ("Log ") 또는 Isfile ("sqlite.sql ") 및 EachFileSizes> 0"인 경우이 하위 폴더를 삭제하십시오. " 이것은 새로운 요구 사항이며 다른 코드가 필요합니다 (시간이있을 때 그것을 할 것입니다 ...) – Aacini