我正在寻找一种方法来删除批处理文件中超过7天的所有文件。我在网上搜索了一下,找到了一些包含数百行代码的示例,还有一些示例需要安装额外的命令行实用程序来完成任务。

在BASH中,只需几行代码就可以完成类似的工作。在Windows中,似乎可以为批处理文件做一些简单的事情。我正在寻找一个解决方案,工作在标准的Windows命令提示符,没有任何额外的实用程序。请不要使用PowerShell或Cygwin。


当前回答

ROBOCOPY很适合我。最初建议我的伊曼。但是,与其将文件/文件夹移动到临时目录,然后删除临时文件夹的内容,不如将文件移动到垃圾桶!!

这是几行我的备份批处理文件的例子:

SET FilesToClean1=C:\Users\pauls12\Temp
SET FilesToClean2=C:\Users\pauls12\Desktop\1616 - Champlain\Engineering\CAD\Backups

SET RecycleBin=C:\$Recycle.Bin\S-1-5-21-1480896384-1411656790-2242726676-748474

robocopy "%FilesToClean1%" "%RecycleBin%" /mov /MINLAD:15 /XA:SH /NC /NDL /NJH /NS /NP /NJS
robocopy "%FilesToClean2%" "%RecycleBin%" /mov /MINLAD:30 /XA:SH /NC /NDL /NJH /NS /NP /NJS

它可以清除“Temp”文件夹中超过15天的文件,以及AutoCAD备份文件夹中超过30天的文件。我使用变量是因为行可以很长,我可以在其他位置重用它们。您只需要找到与您的登录相关联的回收站的dos路径。

这是在我的工作电脑上运行的。我知道你们中的一些人可能有更严格的权利,但无论如何都要尝试一下;)ROBOCOPY参数说明请在“谷歌”中查询。

干杯!

其他回答

我的命令是

forfiles -p "d:\logs" -s -m*.log -d-15 -c"cmd /c del @PATH\@FILE" 

@PATH -在我的例子中只是路径,所以我必须使用@PATH\@FILE

同样适用于文件/?对我来说也不行,但对于文件(没有“?”)工作得很好。

我唯一的问题是:如何添加多个掩码(例如“.log|.bak”)?

所有这些都是关于我在这里下载的forfiles.exe (win XP)

但如果你使用的是Windows服务器,forfiles.exe应该已经在那里,它是不同于ftp版本。这就是为什么我应该修改命令。

对于Windows Server 2003,我使用这个命令:

forfiles -p "d:\Backup" -s -m *.log -d -15 -c "cmd /c del @PATH"

Windows Server 2008 R2操作系统

forfiles /P c:\sql_backups\ /S /M *.sql /D -90 /C "cmd /c del @PATH"

这将删除所有超过90天的.sql文件。

执行如下命令:

ROBOCOPY C:\source C:\destination /mov /minage:7
del C:\destination /q

通过robocopy将所有文件(使用/mov移动文件,然后删除它们,而不是/ Move移动整个文件树,然后删除)移动到另一个位置,然后在该路径上执行删除命令,这样就可以了。

此外,如果你有一个目录中有很多数据,你可以使用/mir开关

对于windows 2012 R2,以下将工作:

    forfiles /p "c:\FOLDERpath" /d -30 /c "cmd /c del @path"

要查看将要删除的文件,请使用此命令

    forfiles /p "c:\FOLDERpath" /d -30 /c "cmd /c echo @path @fdate"

你也许能搞定这件事。你可以看一下这个问题,一个更简单的例子。当你开始比较日期时,复杂性就来了。判断日期是否较大可能很容易,但如果需要实际获得两个日期之间的差异,则需要考虑许多情况。

换句话说,不要试图发明这个,除非你真的不能使用第三方工具。