我在记事本(cmd)中寻找一个命令来删除下载文件夹中 30 天内未访问的所有文件。我查看了大约 10 多个代码,它们都相同,即只删除 30 天内未修改的文件。
forfiles /p "C:\Users\%username%\Downloads" /s /m *.* /c "cmd /c Del @path" /d -30
理论上,此代码有效,但此命令不会删除超过 30 天的文件,而是立即删除文件,即使它们是在几秒钟前创建的。
答案1
Forfiles
已经知道日期存在问题,您可以解决这些问题,但我不喜欢要求Forfiles
您实例化一个cmd
实例才能使用它,而通常您可以在 for 循环中工作,因此 forfiles 总体来说是一个速度慢得多的前景。
但是,确实提供了通过使用和Robocopy
按天数或设定日期进行工作文件选择的功能。(选择早于 x 天/日期的文件,这就是您所需要的)/Minage:[n|date]
/MaxAge:[n|date]
/Minage
下面是一个命令示例,如果您将其粘贴到 CLI 中,它可以满足您的特定需求:
FOR /F "Tokens=*" %_ IN ('
robocopy
"C:\Users\%username%\Downloads"
"C:\DoesntExist"
*
/MINAGE:30
/NJH /NJS /NDL /NS /NC /L
') DO @(DEL /Q /F "%_")
注意,我将其分成多行,以方便您查看和编辑,但是一旦您理解了它,就可以在一行上完成所有内容。
现在,如果在 CMD/批处理脚本中使用它,则必须修改循环变量以使用双精度%
:
FOR /F "Tokens=*" %%_ IN ('
robocopy
"C:\Users\%username%\Downloads"
"C:\DoesntExist"
*
/MINAGE:30
/NJH /NJS /NDL /NS /NC /L
') DO @(DEL /Q /F "%%_")
现在介绍一下这两个功能的作用:
这是:"C:\Users\%username%\Downloads"
要删除的路径。
这个:"C:\DoesntExist"
是一些不存在的文件夹路径,所以没有什么可以“匹配”,如果没有额外的标志,匹配的文件将不会在结果中输出。
这:*
匹配所有文件,无论扩展名是什么,包括没有扩展名的文件。
这个:/MINAGE:30
标志仅选择超过 30 天的文件。
这些:/NJH /NJS /NDL /NS /NC
标志删除了删除文件时不需要的多余信息,例如作业头等。
这个:/L
标志告诉 Robocopy 仅列出文件而不是对它们采取任何操作。
答案2
可能是这样的。它将 30 天未访问的文件移动到用户临时文件夹中名为 ToDelete 的文件中,然后删除 ToDelete 文件夹:
@echo off
robocopy "%userprofile\downloads" "%temp%\ToDelete" /MinLAD:30 /Mov /e
rd /q /s "%temp%\ToDelete"