在Windows 7中,批处理文件用于删除10天前的文件夹。

31

我想创建一个批处理文件,用于删除Windows 7系统下某个文件夹中所有超过10天的子文件夹。

希望能得到帮助。


请明确:您是要删除所有超过10天的文件夹,还是只删除单个文件夹 如果 它超过了10天? - Blorgbeard
删除所有超过10天的文件夹,例如:D:/Test下超过10天的文件夹应该被删除,而不是新创建的文件夹。 - nilesh
可能是删除30天前的子目录的重复问题。 - Blorgbeard
@nilesh,我认为你应该尝试特别使用这个答案,因为你正在使用Win7,因此可以使用forfiles - Blorgbeard
我尝试了这个命令 FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd D:\Study",但是出现了以下错误:“该目录不为空”。在路径中,我给出了 D:/Study,而 study 文件夹包含许多文件夹,我想删除其中早于 10 天的文件夹。请帮忙解决。 - nilesh
@BlorgBeard,当我将学习文件夹清空时,它删除了学习文件夹。这不是我预期的行为。 - nilesh
3个回答

54

改编自这个类似问题的答案:

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: 系统找不到指定的文件。 我需要以 error_level=0 的状态退出。 - Shahar Hamuzim Rajuan
3
我认为你不需要使用FORFILES /S选项,因为通过rd /S选项可以删除子目录。 - dmachop
与其从当前目录运行它,最好始终使用 FORFILES 的 -P <directory_path> 选项。这将防止意外删除,以防您忘记更改目录。 - rahimv

11

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则不会)。


0
如果您想使用参数(例如删除给定目录下的所有子目录),则将以下两行代码放入*.bat或*.cmd文件中:
@echo off
for /f "delims=" %%d in ('dir %1 /s /b /ad ^| sort /r') do rd "%%d" 2>nul && echo rmdir %%d

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

Eg.:

YourBatchFileName c:\temp

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

YourBatchFileName

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接