【问题标题】:Batch - Delete folders批处理 - 删除文件夹
【发布时间】:2013-10-23 07:29:45
【问题描述】:

首先:我是批处理的新手。

我想写一个批处理文件来删除最小的文件和文件夹。 5天以上。此代码适用于所有文件:

FORFILES /p "C:\Users\rs\Desktop\testbatch" /s /m *.* /d -5 /c "cmd /c if not @isdir==TRUE del @path"

但是我的文件夹还在这里,如果它们是最小的,我也不知道如何删除它们。 5天大。有人可以给我一个提示吗?

干杯

【问题讨论】:

  • 在第一行下面写一个脚本来删除空文件夹“for /f "delims=" %%d in ('dir /s /b /ad %1 ^| sort / r') 执行 rd "%%d" 2>nul" 。我们假设如果一个文件夹有 2 个文件,一个是 2 天的,一个是 6 天的,我们只删除 6 天的文件。如果所有文件都超过 5 天,请删除文件并删除目录。如果第一个脚本有效,请使用提到的脚本删除空文件夹。
  • @esac:不是重复的,这是关于删除文件夹,或者更具体的问为什么文件夹本身没有被删除,而文件却被删除了。
  • @esac 这不是重复的。我问为什么我的文件夹仍然存在:)
  • 这个“我如何删除超过 x 天的文件”的问题在这里被问了很多。我在相关边栏中看到 6。有很多例子可以说明如何实现它。不需要另一个。事实上,这个特别说要使用 rmdir ,这是同一问题的答案。 *.com/questions/13517017/…

标签: batch-file


【解决方案1】:

del 删除文件,而您需要将rmdir 用于目录。

【讨论】:

  • rmdir 是指rd?如果我写rmdirrd 有区别吗?
  • 不,是一样的。我不知道哪个是另一个的别名,但我知道两者都做同样的事情。 rmdir 提高可读性 (IMO) 以了解您正在删除目录,但与 mkdirmd 一样。
  • 嗯,好的,谢谢。所以我现在得到了if not @isdir==TRUE rd /s /q @path 而不是if not @isdir==TRUE del @path。这应该是正确的,对吗?它似乎不起作用,因为文件夹仍然在这里(为了测试它,我将/d -0 添加到文件中)。
  • 您可以将其更改为 echo "rd /s /q @path" 以查看它实际上要删除的内容。
  • 您可能希望将*.* 更改为*。您不是在寻找文件。
【解决方案2】:
FORFILES /p "C:\Users\rs\Desktop\testbatch" /s /m *.* /d -5 /c "cmd /c if  @isdir==TRUE  rd /s /q  @path "

【讨论】:

  • 我必须使用 /s 两次?
  • 第二个/s转到rd,如果你rd /?的意思是“删除指定目录中除目录本身之外的所有目录和文件。用于删除目录树。 "
  • 好的,谢谢。但这似乎不起作用。我试过/d -0 来测试它,但我的文件夹还在这里
  • 在 if 条件下有一个多余的not
  • 你的意思是我必须删除not