繁体   English   中英

如何删除目录和子目录中除某些文件夹之外的所有文件?

[英]How to delete all files in a directory and subdirectories except for certain folders?

每个月,我都会打印一些报告。 打印后,我将它们通过ftp下载到一个网站。 为了避免每次通过ftp传输相同的文件,我想删除目录中的所有文件。 但是,并非所有文件夹都需要删除文件。 是否可以删除目录和子目录中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)。 我要离开的人的名字有“批处理表”,“历史记录”,“对帐单”,“空白帐单”,“发票”和“ interestPaid”。 因此,我想删除数字名称(如1008)存储在文件夹中的所有pdf,而不删除Batchsheets中的文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM