删除下载文件夹中超过 30 天未访问的文件

删除下载文件夹中超过 30 天未访问的文件

我在记事本(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"

相关内容