如何删除目录和子目录中除特定文件夹以外的所有文件?

时间:2017-02-28 17:27:55

标签: windows cmd

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

我知道你可以这样做:

real function inner_value(this)
  type(inner), intent(in) :: this
  inner_value = this%container%y
end function

删除所有文件。我对cmd非常不熟悉,我知道可以使用if语句,但我不确定它们是如何被语法化的。理想情况下,我会有类似的东西:

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

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

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

C:\ Users \ Owner \ SharePoint \ EDSIReports - Reports \ Reports

在该文件夹中

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

1 个答案:

答案 0 :(得分:3)

一种简单的方法是使用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开关。