如何创build一个批处理脚本,在达到文件夹大小限制时删除最旧的文件

我发现很多类似的问题的解决scheme,但我不知道是否有可能创build一个脚本,删除最旧的文件一旦达到预设的文件夹大小限制?

你需要解决两个问题。

首先,你需要计算文件夹的大小。 使用类似这样的代码

:foldersize set sz=0 for %%F in (%1\*.*) do ( set /a kb = %%~zF / 1024 set /a sz = !sz! + !kb! echo %%F %%~zF !kb! !sz! ) goto :eof 

其次,您需要识别较旧的文件并删除它们,直到达到大小

 for /F "tokens=*" %%F in ('dir /AD /OD /B %1\*.*') do ( if !sz! geq !targetsize! ( call :filesize %1\%%F del %1\%%F set /a sz = !sz! - !kb! ) else ( goto :eof ) ) goto :eof :filesize set /a kb = %~z1 / 1024 goto :eof 

把所有的东西放在一起…

 @echo off setlocal enabledelayedexpansion set /a targetsize=%2 call :foldersize %1 for /F "tokens=*" %%F in ('dir /AD /OD /B %1\*.*') do ( if !sz! geq !targetsize! ( call :filesize %1\%%F del %1\%%F set /a sz = !sz! - !kb! ) else ( echo Done... %1 size is now !sz! KB goto :eof ) ) echo Not completely done... %1 size is still !sz! KB goto :eof :filesize set /a kb = %~z1 / 1024 goto :eof :foldersize set sz=0 for %%F in (%1\*.*) do ( set /a kb = %%~zF / 1024 set /a sz = !sz! + !kb! ) goto :eof 

测试和测试和测试,因为它不会将文件移动到垃圾箱,但永久删除文件。

另外,如果您有只读文件,您可能需要指定/F选项。

如果您在该文件夹中有子文件夹,并且希望将这些文件夹放入文件夹大小的帐户中,并且想要删除较旧的文件,则事情可能会变得更加复杂。

这个尺寸的计算是这样的

 :foldersizerecurse set sz=0 for /F %%F in ('dir /OD /B *.*') do ( set /a kb = %%~zF / 1024 set /a sz = !sz! + !kb! echo %%F %%~zF !kb! !sz! ) goto :eof 

并删除旧文件..你需要管道'dir / S'命令输出按日期进行排序和排序。 我觉得很累