2014-02-22 207 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 - 良好的捕获。 –

相关问题