如何删除.bat脚本中除1个文件夹以外的文件夹中的所有文件和子文件夹?

时间:2015-09-25 12:19:19

标签: batch-file

我有一个存储许多日志文件和子文件夹的文件夹。我想删除除1个名为Excel_Export的文件夹以外的所有文件和子文件夹,不应删除。我在批处理脚本中使用以下命令:

move D:\ABC\Delete_Test\Retain_Folder D:\ABC
rd /s /q "D:\ABC\Delete_Test"
move D:\ABC\Retain_Folder D:\ABC\Delete_Test

然而,在这个脚本运行之后,即使是'Retain_Folder'也会被删除,除了里面的文件。在上面的命令中我做错了什么? 还有,有更好的方法吗?

注意: 所有其他文件夹的名称(要删除的名称)都以'$'符号开头。

2 个答案:

答案 0 :(得分:0)

这是未经测试的 - 它会删除d:\abc中的所有普通文件,然后删除同一文件夹中以$开头的所有文件夹。

@echo off
del "d:\abc\*.*?"
for /d %%a in ("d:\abc\$*") do rd /s /q "%%a"

答案 1 :(得分:0)

您的想法可能是完成任务的最有效(最快)方式,除非您有一个小错误。您的RD命令会删除Delete_Test文件夹,因此您必须重新创建它,然后才能将Retain_Folder移回其所属的位置。您还可能希望在move文件夹时将输出重定向为空 - 您不需要查看移动消息。

move "D:\ABC\Delete_Test\Retain_Folder" "D:\ABC" >nul
rd /s /q "D:\ABC\Delete_Test"
md "D:\ABC\Delete_Test"
move "D:\ABC\Retain_Folder" "D:\ABC\Delete_Test" >nul

如果您知道D:\ABC\Retain_Folder在开始之前尚不存在,或者如果它确实存在,那么此策略只能正常工作,那么它必须为空。