将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"
选项
- 由于 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 /?
还描述了命令