通过运行limitdirsize.bat c:\example 4000000
将C:\example
限制为4GB,可以调用以下批处理文件。处理仅包含文件的文件夹时,它可以正常工作。
运行时,它会删除目录中最旧的文件,直到文件夹的大小为4GB。
@echo off
setlocal enabledelayedexpansion
set /a targetsize=%2
call :foldersize %1
for /F "tokens=*" %%F in ('dir /A-D /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
我想限制只包含子目录的目录的大小。
用于确定子目录大小的批处理脚本将是
: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'命令输出按日期排序和排序
为清楚起见::foldersize
计算正在清理的文件夹的大小,第4行与该函数之间的所有内容用于识别旧文件并删除它们,直到达到所需的目录大小。