2014-02-22 208 views
0

要更具體地瞭解問題,我有一個文件夾層次結構。批處理刪除沒有自己子文件夾的所有子文件夾

Render/a/b/c/d/e/f 

其中Δf是1和4

例如,你可以有之間的數字.. 渲染/ 1/1/3/2/4/1 /(Somefile.jpg)

由於空間限制,我不需要最後一層子文件夾或其內容。

我的想法是編寫一個批處理文件,該文件將遍歷所有文件夾及其子文件夾,直到找到不包含其他子文件夾的文件夾,表示其最後一個文件夾,然後沿着文件夾刪除文件夾與其內容。

系統設置的方式是否有基礎渲染。該渲染被分成4個子渲染,從而得到更詳細的(因此1-4個子目錄)。 因此,每個文件夾可能包含4個圖像,以及4個包含更小,更詳細圖像的子目錄。 該文件夾不需要擁有所有4個子目錄,這取決於該特定渲染的大小。 最後,有一組最不詳細的圖像。

我能理解 RD/Q/S方向1 一塊代碼,與 爲%%我在(套) 但能夠將它們組合在一起來執行這項任務,我大惑不解一起。

1)找到渲染目錄的所有子目錄。 2)移到第一個目錄,找到所有的子目錄。 3)重複步驟2 4)如果沒有子目錄,我知道它的最後一次渲染 5)刪除內容和目錄 6)移回目錄,並繼續通過 7)重複整個過程與第2,3,4目錄。

我可以用c#執行這個任務,但我需要有一個.bat文件。

編輯: 我原來是爲了批處理,是因爲它很簡單,只需要一個文件。但是,我決定使用perl腳本,因爲兩個文件並不比一個糟糕。

# read zoomlevel from generated file.js 
my $zoomlevel=0; 
my $maxzoom=0; 
if (open OC,"Render/file.js") 
{ 
    foreach (<OC>) 
    { 
    if (index($_, "zoomLevels") != -1) 
    { 
     @data = split(' ', $_); 

     $zoomlevel=substr $data[1],0,1; 
     print "$data[1]\n"; 
     print "$zoomlevel\n"; 
    } 
    if (index($_, "maxZoom") != -1) 
    { 
     @data = split(' ', $_); 

     $maxzoom=substr $data[1],0,1; 
     print "$data[1]\n"; 
     print "$maxzoom\n"; 
    } 
    } 
    my $numdelete=$zoomlevel-$maxzoom; 
    print "I'm going to delete $numdelete zoomlevels.\n"; 
    for($count = 0; $count < $numdelete; $count++) { 
    print "deleting zoomlevel ".($zoomlevel-$count).".\n"; 
    my $delstr = "Render/render/".'*/' x ($zoomlevel-$count)."*.jpg"; 
    unlink glob "$delstr"; 
    } 
} 
else 
    {print "couldn't open file\n";} 

然後我只是創建了一個運行perl腳本的批處理文件。

@echo off 
perl removal.pl 
pause 
+0

堆棧溢出是專業和發燒友程序員的問題和答案網站。問題必須**表現出對所解決問題的最小理解**。告訴我們你試圖去做什麼,爲什麼它沒有工作,以及它應該如何工作。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。 – Endoro

回答

0

它可以用這樣的批處理語言來完成。鑑於以下文件夾/文件結構:

New folder 
├───New folder (2) 
│ │ New Text Document (2).txt 
│ │ New Text Document.txt 
│ │ 
│ └───New folder (3) 
│  │ New Text Document (2).txt 
│  │ 
│  └───New folder (5) 
│    New Text Document (3).txt 
│ 
└───New folder (4) 
    │ New Text Document (3).txt 
    │ 
    └───New folder (6) 
     │ New Text Document (4).txt 
     │ 
     ├───New folder (7) 
     │  New Text Document.txt 
     │ 
     └───New folder (8) 
      │ New Text Document (4).txt 
      │ 
      └───New folder (9) 
        New Text Document (5).txt 

應刪除文件夾5,7和9。

@echo off 

setlocal ENABLEDELAYEDEXPANSION 

cd "New folder" 

for /f "tokens=1* delims=" %%i in ('dir /a:d /b /s') do (
    dir "%%i" /a:d | find /i " 2 Dir(s)" > nul 
    if !errorlevel!==0 rd "%%i" /s /q 
) 

cd .. 

endlocal 

文件夾/文件結構如下:運行下面的批處理文件後

New folder 
├───New folder (2) 
│ │ New Text Document (2).txt 
│ │ New Text Document.txt 
│ │ 
│ └───New folder (3) 
│   New Text Document (2).txt 
│ 
└───New folder (4) 
    │ New Text Document (3).txt 
    │ 
    └───New folder (6) 
     │ New Text Document (4).txt 
     │ 
     └───New folder (8) 
       New Text Document (4).txt 

for循環枚舉所有文件夾和傳遞文件夾名稱爲dir ... | find ...命令。如果它找到2 Dir(s),即...文件夾,它知道沒有其他子文件夾,並刪除該文件夾。

+0

當有12個或22個或32個目錄等時,這將會失敗。''2 Dir(s)''必須有一個前導空格''2 Dir(s)'' – foxidrive

+0

@foxidrive - 良好的捕獲。 –

相關問題