2012-11-08 91 views
0

請幫忙批量寫入:CMD批量刪除文件夾

在磁盤c:\我有文件夾名爲test; 在這個文件夾中我有不同名稱的子文件夾。 我需要批處理命令來遍歷所有子文件夾,並查找名爲「Log」和/或「sqlite.sql」的文件;如果這些文件大小爲< 0 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'文件夾名稱'」 2.此示例不添加到刪除列表子文件,它具有日誌文件= 0 kb,如果存在另一個sqlite.sql文件。 邏輯必須是如果日誌> 0並存在sqlite.sql然後離開子文件夾,否則如果日誌= 0或sqlite.sql或日誌文件不存在然後刪除。 –

+0

1.此解決方案不刪除也不創建任何內容,它只是_show_最終結果命令。當你對此滿意時,刪除'ECHO'部分,執行命令。 2.您的第一個請求非常明確:「如果文件大小<0 Kb或不存在,則刪除此子文件夾」「,如果Isfile(」Log「)或Isfile(」sqlite.sql「)和EachFileSizes> 0」。這是一個新的要求,需要一個不同的代碼(當我有一段時間時,我會這樣做......) – Aacini