-1

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

FORFILES /p “X:\DAILY\1 MONDAY” /m *.* /c “cmd /c Del /F /Q @path” /d -7 /s & FORFILES /p “X:\DAILY\1 MONDAY” /S /D -7 /C “cmd /c IF @isdir == TRUE rd /S /Q @path”

现在我的用户告诉我在 1 MONDAY 下有一个他们不想清除的 Reference 文件夹(但所有其他子目录都应该被清空和删除。)谁能告诉我如何做到这一点?

谢谢!

4

3 回答 3

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>

于 2020-05-16T01:04:24.483 回答
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

就是这样,没有其他需要添加或修改的内容。

于 2020-05-16T10:46:02.623 回答
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\WeeklyDeleteX:\DAILY\1 MONDAY\Reference因为/XD "X:\DAILY\1 MONDAY\WeeklyDelete" "X:\DAILY\1 MONDAY\Reference"选项
  • 由于 option ,排除了过去 7 天内最后修改的所有文件/MINAGE:7

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

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

只有在移动与这些条件匹配的所有文件后,文件夹才被移动。因此,不会移动包含文件或子文件夹的文件夹。

选项/S代替/E和选项/MOV代替/MOVE可用于仅移动文件并且不移动在移动文件之前或之后为空的文件夹。

ROBOCOPY可以非常快速地完成文件和文件夹的移动,因为目标文件夹与源文件夹位于同一驱动器上,这意味着只需更新该驱动器的文件系统,并且根本不需要移动文件数据。

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

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

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

还描述了命令

于 2020-05-16T11:27:42.370 回答