在批处理操作中忽略一个文件夹及其内容

时间:2020-05-15 21:35:16

标签: batch-file forfiles

我试图创建一个批处理文件,该文件将删除文件夹中的所有文件和子目录。我发现有效的命令是这样

b[i:i+2]

现在我的用户告诉我他们不想清除的引用文件夹在MONDAY(星期一)下(但是所有其他子目录都应该清空并删除。)有人可以建议我该怎么做吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

for /f %%a in ("X:\Daily\1 MONDAY\*") do (if %%a neq "<filename you want to save>" (del %%a))

尚未测试

这应该可以。将您要保存的文件放入<filename you want to save>

答案 1 :(得分:0)

根据您提供的信息,我建议将其作为更新的批处理文件:

@%__AppDir__%forfiles.exe /P "X:\DAILY\1 MONDAY" /C "cmd /C If @IsDir == FALSE 0x28Del /A /F @Path0x29 Else If /I Not @File == 0x22Reference0x22 RD /S /Q @Path" /D -7

就是这样,无需添加或修改其他任何内容。

答案 2 :(得分:0)

使用 FORFILES 来执行此任务效率极低,因为 FORFILES 必须为发现的每个文件开始cmd.exe才能删除早于7天的文件以及要删除的每个文件夹。

更好的解决方案是:

@echo off
%SystemRoot%\System32\robocopy.exe "X:\DAILY\1 MONDAY" "X:\DAILY\1 MONDAY\WeeklyDelete" /E /XD "X:\DAILY\1 MONDAY\WeeklyDelete" "X:\DAILY\1 MONDAY\Reference" /MINAGE:7 /MOVE /NDL /NFL /NJH /NJS
if exist "X:\DAILY\1 MONDAY\WeeklyDelete\" rd /Q /S "X:\DAILY\1 MONDAY\WeeklyDelete"

ROBOCOPY 搜索

  • 对于目录X:\DAILY\1 MONDAY中的所有文件
  • 及其子目录包括空目录,这是由于选项/E
  • 由于带有选项X:\DAILY\1 MONDAY\WeeklyDelete
  • ,排除了两个目录X:\DAILY\1 MONDAY\Reference/XD "X:\DAILY\1 MONDAY\WeeklyDelete" "X:\DAILY\1 MONDAY\Reference"及其所有子目录中的文件
  • 排除由于选项/MINAGE:7而在最近7天最后修改的所有文件。

找到的符合这些条件的文件和文件夹将移至X:\DAILY\1 MONDAY\WeeklyDelete,从而自动在不存在的目标文件夹上创建目标文件夹。

/NDL /NFL /NJH /NJS选项用于打印移动目录列表,移动文件列表,标题和摘要。

仅在移动符合这些条件的所有文件后将其移动为空白时,才移动文件夹。因此,包含文件或子文件夹的文件夹不会移动。

选项/S代替/E和选项/MOV代替/MOVE只能用于移动文件,也不能用于移动之前或之后为空的文件夹移动文件。

ROBOCOPY 可以非常快速地完成文件和文件夹的移动,因为目标文件夹与源文件夹位于同一驱动器上,这意味着仅该驱动器的文件系统必须更新,而无需更新任何文件数据完全动了。

ROBOCOPY 完成文件系统更新以移动文件和文件夹以验证目标文件夹X:\DAILY\1 MONDAY\WeeklyDelete是否存在之后,使用 IF 条件。在这种情况下,由于使用选项/Q,使用命令 RD 静默删除此文件夹,由于使用选项/S,使用了所有文件和子目录。同样,此操作只是文件系统更新,并未真正删除存储在存储介质上的文件数据,因此处理速度非常快。

打开命令提示符窗口,然后在其中执行以下命令,以在上面的三行中阅读有关已使用命令的更多信息。

  • echo /?
  • if /?
  • rd /?
  • robocopy /?

还介绍了命令

相关问题