Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 批处理以删除不包含';没有自己的子文件夹_Loops_Batch File_Recursion_Directory - Fatal编程技术网

Loops 批处理以删除不包含';没有自己的子文件夹

Loops 批处理以删除不包含';没有自己的子文件夹,loops,batch-file,recursion,directory,Loops,Batch File,Recursion,Directory,更具体地说,我有一个文件夹层次结构 Render/a/b/c/d/e/f 其中a-f是介于1和4之间的数字 例如,你可以。。 Render/1/1/3/2/4/1/(Somefile.jpg) 由于空间限制,我不需要最后一层的子文件夹或其内容 我的想法是编写一个批处理文件,循环遍历所有文件夹及其子文件夹,直到找到不包含其他子文件夹的文件夹,表示它是最后一个文件夹,然后删除文件夹及其内容 系统的设置方式是有一个基本渲染。该渲染被拆分为4个子渲染,这些子渲染会变得更详细(因此为1-4个子目录)。

更具体地说,我有一个文件夹层次结构

Render/a/b/c/d/e/f
其中a-f是介于1和4之间的数字

例如,你可以。。 Render/1/1/3/2/4/1/(Somefile.jpg)

由于空间限制,我不需要最后一层的子文件夹或其内容

我的想法是编写一个批处理文件,循环遍历所有文件夹及其子文件夹,直到找到不包含其他子文件夹的文件夹,表示它是最后一个文件夹,然后删除文件夹及其内容

系统的设置方式是有一个基本渲染。该渲染被拆分为4个子渲染,这些子渲染会变得更详细(因此为1-4个子目录)。 因此,每个文件夹可能包含4个图像,以及包含更小、更详细图像的4个子目录。 文件夹不需要包含所有4个子目录,它取决于特定渲染的大小。 最后,还有一组最详细的图像,这是不需要的

我能理解 rd/q/s指令1 一段代码,以及 对于%%i英寸(套) 但是,能够将它们结合起来执行这项任务让我感到困惑

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";}

它可以用这样的批处理语言来完成。给定以下文件夹/文件结构:

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…|查找…
命令。如果它发现
2 Dir(s)
,即
.
文件夹,它知道没有其他子文件夹,并删除该文件夹。

Stack Overflow是专业和热心程序员的问答网站。问题必须表现出对所解决问题的最低理解。告诉我们你试过做什么,为什么不起作用,以及它应该如何起作用。另请参见:。当有12个或22个或32个目录等时,此操作将失败。
“2个目录”
必须有一个前导空格
“2个目录”
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