递归删除文件夹中N天前的文件的批处理文件

6
我现在正在使用批处理文件来删除所有以.snp结尾的文件,这些文件的时间超过180天。以下代码可用于删除根文件夹下所有以.snp结尾的文件:

C:\Program Files\Snapshots

但是我最近发现,在Snapshots文件夹中有按日期组织的文件夹,如下所示:

"1-10-2014, 12-20-2014, 10-15-2014 等等..."

下面的代码行不能递归搜索每个目录,因此无法删除。
应该对此代码进行哪些更改,以便在根文件夹中递归搜索文件夹并删除超过180天的文件?
forfiles /M *.snp /P "C:\Program Files\Snapshots" /S /D -180 /C "cmd /c del /F /Q @path"

你有没有尝试过不使用del命令?forfiles /M *.snp /P "C:\Program Files\Snapshots" /S /D -180 /C "cmd /c echo @path" - Paul
2个回答

4
没有/D(日期)可以用于子文件夹。
forfiles /M *.txt /P "C:\hlpme" /S /C "cmd /c del /f /q @path

但显然你希望日期在那里 然后在CMD中执行

forfiles /D -180 /M *.txt /P "C:\hlpme" /S /C "cmd /c del /f /q @path

路径前的 /D 表示选择所有修改时间超过180天的文件。

1
最可靠的选择是将For命令的优点与FORFILES命令相结合,让每个命令发挥其所长。
Set str_Ext=*.snp
Set int_Age=-180
For /R "%~dp0" %%D IN (.) DO (
    For /F "usebackq tokens=*" %%F IN (`FORFILES /P "%%~D" /m %str_Ext% /D %int_Age% 2^>nul`) DO (
        Call :s_Del_File "%%~D" "%%~F"
    )
)
Goto :EOF
:s_Del_File
Set "str_DIR=%~1"
Set "str_FIL=%~2"
Set "str_DIR=%str_DIR:~0,-1%"
DEL /F/Q/A "%str_DIR%%str_FIL%"
Goto :EOF

在第二个FOR命令中,反引号(~键)包含FORFILES命令,并使用控制台输出调用批处理子例程以删除指定的文件。
文件夹和文件名中的空格不会减慢此过程的速度,而Set命令周围的双引号["]将允许该进程使用具有括号或其他奇特但可允许字符的文件夹和文件。

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