Batch file 如果超过N GB,则使用Windows bat脚本获取目录大小,然后删除最旧的文件以恢复空间

Batch file 如果超过N GB,则使用Windows bat脚本获取目录大小,然后删除最旧的文件以恢复空间,batch-file,size,directory,Batch File,Size,Directory,我是bat脚本新手,需要满足以下要求: 如果Dir例如.C:\test size超过50GB,那么脚本应该删除最旧的文件,直到目录大小恢复到50GB或更小 我已经修改了在上找到的以下脚本,但我不确定如何继续处理其余的需求。请参阅我迄今为止所做的小修改,如有任何意见,我将不胜感激: @echo off set limit="50.0" set Folder="C:\test" echo The size of %Folder% is Call :GetSize %Folder% IF /I "C

我是bat脚本新手,需要满足以下要求:

如果Dir例如.C:\test size超过50GB,那么脚本应该删除最旧的文件,直到目录大小恢复到50GB或更小

我已经修改了在上找到的以下脚本,但我不确定如何继续处理其余的需求。请参阅我迄今为止所做的小修改,如有任何意见,我将不胜感激:

@echo off
set limit="50.0"
set Folder="C:\test"
echo The size of %Folder% is 
Call :GetSize %Folder%
IF /I "Call :GetSize %Folder%" GEQ "50.0" Echo Overlimit
<Here I would like to delete oldest zip files until the folder size is back to <=50.0GB>


pause
:GetSize
(
echo wscript.echo GetSize("%~1"^)
echo Function GetSize(MyFolder^)
echo    Set fso = CreateObject("Scripting.FileSystemObject"^)
echo    Set objFolder= fso.GetFolder(MyFolder^)  
echo    GetSize = FormatSize(objFolder.Size^)
echo End Function
echo '*******************************************************************
echo 'Function to format a number into typical size scales
echo Function FormatSize(iSize^)
echo    aLabel = Array("bytes", "KB", "MB", "GB", "TB"^)
echo    For i = 0 to 4
echo        If iSize ^> 1024 Then
echo            iSize = iSize / 1024
echo        Else
echo            Exit For
echo        End If
echo    Next
echo    FormatSize = Round(iSize,2^)
echo End Function
echo '*******************************************************************
)>%tmp%\Size.vbs
Cscript /NoLogo %tmp%\Size.vbs
Del %tmp%\Size.vbs
Exit /b
@echo关闭
设置限制=“50.0”
set Folder=“C:\test”
回显%Folder%的大小为
调用:GetSize%文件夹%
IF/I“调用:GetSize%文件夹%”GEQ“50.0”回显超限
那么
echo iSize=iSize/1024
回声
回音出口
回显结束If
下一个回声
回声格式大小=圆形(iSize,2^)
回波结束函数
回声'*******************************************************************
)>%tmp%\Size.vbs
Cscript/NoLogo%tmp%\Size.vbs
删除%tmp%\Size.vbs
退出/b

这似乎在我的电脑上起作用

Set fso=CreateObject(“Scripting.FileSystemObject”)
设置F=fso.GetFolder(“C:\Users\User\Desktop\New Folder\Stories\Test”)
如果F.size>2^30*2,则
“对一个不能处理选项卡的愚蠢编辑器的评论
'创建内存中断开连接的记录集以按日期对文件排序
Set rs=CreateObject(“ADODB.Recordset”)
用rs
.Fields.Append“Date”,7
.Fields.Append“Txt”,2015000
打开
对于f文件中的每件事
.AddNew
.Fields(“日期”).value=thing.datelastmodified
.Fields(“Txt”).value=thing.path
.更新
下一个
.Sort=“日期描述”
做而不做
fso.deletefile.Fields(“Txt”).Value
如果f.size<2^30*2,则退出Do
.下一步
环
以
如果结束

PS 2^30=1吉比特或1吉比特。

这是VB还是bat脚本?vbscript与您的程序一样。效果很好,是否有可能从我的@现有bat脚本中运行此脚本?我的意思是,我有一个bat脚本,每天压缩所有文件,然后删除超过15天的压缩文件。这是第一个要求,如果文件夹大小增加到50GB以上,则应删除最旧的文件,直到其减少到阈值。我想从一个脚本中完成所有操作。将echo放在每一行之前,并像处理现有vbs一样使用转义括号。另外
CreateObject(“Wscript.Shell”).Run“Program to Run.exe”,true
此解决方案适用于包含多个文件的文件夹(谢谢!)。后续问题,是否可以扩展此vbs脚本以首先开始删除最旧子文件夹中的文件?还是要求太高了?:)