我找到了很多类似问题的解决方案,但我想知道是否可以创建一个脚本,一旦达到预设的文件夹大小限制就删除最旧的文件?
答案 0 :(得分:5)
你需要解决两个问题。
首先,您需要计算文件夹大小。使用类似于此
的代码: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 /A-D /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 /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
测试,测试和测试,因为它不会将文件移动到垃圾箱,但会永久删除文件。
此外,如果您要删除只读文件,则可能需要指定/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'命令输出按日期排序和排序。我觉得很累。