【问题标题】:How to delete all files in a directory and subdirectories except for certain folders?如何删除目录和子目录中除某些文件夹外的所有文件?
【发布时间】:2017-02-28 17:27:55
【问题描述】:

每个月,我都会打印一些报告。打印后,我将它们 ftp 到一个网站。为了避免每次都ftping相同的文件,我想删除目录中的所有文件。但是,并非所有文件夹都需要删除文件。是否可以删除目录和子目录中的所有文件,不包括 3 或 4 个文件夹?

我知道你可以这样做:

del /s /q "C:\Users\Owner\OneDrive\test\*.*"

删除所有文件。我对 cmd 很不熟悉,而且我知道可以使用 if 语句,但我不确定它们是如何语法的。理想情况下,我会有这样的东西:

if(folderName != "Batchsheets" || folderName != "Statements" || folderName != "Histories")
{
   folder.delete();
}

任何帮助将不胜感激,谢谢!

编辑:文件夹结构如下所示: 我要删除的主目录如下所示:

C:\Users\Owner\SharePoint\EDSIReports - 报告\报告

在那个文件夹里

我有大约 50 个文件夹。我要删除的所有文件夹都只是数字(例如:1007、1008、1087、12100、20100)。我想留下的名称有 Batchsheets、History、Statements、BlankStatements、Invoices 和 InterestPaid)。所以我想删除存储在数字名称为 1008 的文件夹中的所有 pdf,而不删除 Batchsheets 中的文件。

【问题讨论】:

  • 你能显示文件夹结构吗?不清楚要保留的文件夹放在哪里。

标签: windows cmd


【解决方案1】:

一种简单的方法是使用robocopy。这个想法是创建一个空文件夹并在您的文件夹结构上同步这个空文件夹。这将删除任何内容(源中没有任何内容,因此,同步它会使目标为空)。现在的诀窍是从操作中排除所需的目录。

cd /d "C:\Users\Owner\SharePoint\EDSIReports - Reports\Reports"
md _empty_ & robocopy _empty_ . /nocopy /purge /xd Batchsheets Statements Histories BlankStatements Invoices InterestPaid /L

如果您希望删除所有数字文件夹,则可以使用

for /d %a in (*) do @(for /f "delims=0123456789" %b in ("%a") do @break) || echo rmdir /s /q "%a"

对于每个文件夹,如果删除所有数字(我们将使用它们作为分隔符)给我们留下一个空字符串,则内部 for /f 将失败(它没有要处理的内容)和条件运算符 ||(执行下一个命令如果之前失败)将执行rmdir

或者,我们可以枚举所有数字文件夹并删除它们

for /f "delims=" %a in('dir /ad /b ^| findstr /x "[0-9]*"') do @echo rmdir /s /q "%a"

注意:

  • 所有命令均已编写,可在命令行中使用。要在批处理文件中使用,for 可替换参数(%a%b)需要转义,将百分号加倍(%%a%%b

  • rmdir 命令前面有一个echo,以避免调试时出现问题。如果输出正确,去掉echo

  • robocopy 命令包含一个/L 开关。它将使robocopy 命令列出将要处理的内容。如果输出正确,请移除/L 开关。

【讨论】:

  • 我发现正确使用 /x 选项有点棘手,因此请确保您有备份。 :-)
  • 哇,这太棒了!感谢您的详细回答!
猜你喜欢
  • 2010-10-08
  • 2011-05-18
  • 2013-07-31
  • 2010-11-12
  • 1970-01-01
  • 2014-02-05
  • 2019-11-21
  • 2010-11-20
相关资源
最近更新 更多