【问题标题】:Batch file to delete folders older than 10 days in Windows 7在 Windows 7 中删除超过 10 天的文件夹的批处理文件
【发布时间】:2023-10-19 04:47:01
【问题描述】:

我想创建一个批处理文件,该文件应使用 Windows 7 删除文件夹中超过 10 天的所有子文件夹

任何帮助将不胜感激。

【问题讨论】:

  • 请明确:您是要删除所有超过 10 天的文件夹,还是要删除单个文件夹如果它超过 10 天..?
  • 删除所有超过 10 天的文件夹,例如:D:/Test 下超过 10 天的文件夹应该被删除,而不是新创建的文件夹..
  • @nilesh,我认为您应该特别尝试this answer,因为您使用的是Win7,因此可以使用forfiles
  • 我试过这个 FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd D:\Study" 但得到以下错误 "目录不为空" 在路径 i给 D:/Study 和 study 文件夹包含许多我想删除的文件夹,这些文件夹都超过 10 天。请帮助...

标签: batch-file


【解决方案1】:

改编自this answer to a very similar question

FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"

您应该在 d:\study 文件夹中运行此命令。它将删除所有超过 10 天的子文件夹。

rd 后面的/S /Q 使其删除文件夹,即使它们不为空,也不提示。

我建议你把上面的命令放到一个.bat文件中,保存为d:\study\cleanup.bat

【讨论】:

  • 我用了这个命令,文件夹已经被删除了。但是我收到一个错误:错误:系统找不到指定的文件。我需要退出 error_level=0
  • 我认为您不需要 FORFILES /S 选项,因为子目录删除将通过 rd /S 选项。
【解决方案2】:

FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"

我无法让 Blorgbeard 的建议发挥作用,但我能够让它与 RMDIR 而不是 RD 一起使用:

FORFILES /p N:\test /S /D -10 /C "cmd /c IF @isdir == TRUE RMDIR /S /Q @path"

由于 RMDIR 不会删除非空文件夹,所以我最终也使用此代码删除了 10 天以上的文件,然后删除了 10 天以上的文件夹。

FOR /d %%K in ("n:\test*") DO (

FOR /d %%J in ("%%K*") DO (

FORFILES /P %%J /S /M . /D -10 /C "cmd /c del @file"

)

)

FORFILES /p N:\test /S /D -10 /C "cmd /c IF @isdir == TRUE RMDIR /S /Q @path"

我使用此代码清除了 test 中文件夹中的子文件夹(例如 n:\test\abc\123 在为空时会被清除,但 n:\test\abc 不会被清除

【讨论】:

    【解决方案3】:

    如果你想使用它的参数(即删除给定目录下的所有子目录),然后将这两行放入 *.bat 或 *.cmd 文件:

    @echo off
    for /f "delims=" %%d in ('dir %1 /s /b /ad ^| sort /r') do rd "%%d" 2>nul && echo rmdir %%d
    

    并将脚本路径添加到您的 PATH 环境变量中。在这种情况下,您可以从任何位置调用批处理文件(我想 UNC 路径也应该可以)。

    例如:

    YourBatchFileName c:\temp
    

    (如果需要,您可以使用引号)

    将删除 c:\temp 文件夹下的所有空子目录

    YourBatchFileName
    

    将删除当前目录下的所有空子目录。

    【讨论】: