为了更具体地说明问题,我有一个文件夹层次结构。
Render/a/b/c/d/e/f
其中a-f是1到4之间的数字。
例如你可以...... 渲染/ 1/1/3/2/4/1 /(Somefile.jpg)
由于篇幅限制,我不需要最后一层子文件夹或其内容。
我的想法是写一个循环遍历所有文件夹及其子文件夹的批处理文件,直到找到不包含另一个子文件夹的文件夹,表示它是最后一个文件夹,然后删除该文件夹它的内容。
系统的设置方式是基础渲染。该渲染被分成4个子渲染,它们更加详细(因此1-4个子目录)。 因此,每个文件夹可以包含4个图像,以及包含较小,更详细图像的4个子目录。 该文件夹不需要包含所有4个子目录,它取决于特定渲染的大小。 最后,有一组最详细的图像是不需要的。
我能理解 rd / q / s Dir1 一段代码,以及 for %% i in(set) 但能够将它们结合起来执行这项任务令我感到困惑。
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 :(得分: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
循环枚举所有文件夹并将foldername传递给dir ... | find ...
命令。如果它找到2 Dir(s)
,意味着.
和..
文件夹,则它知道没有其他子文件夹,它会删除该文件夹。