定时删除指定文件夹及子文件夹 确保硬盘不会被占满 bat脚本

如果你想要一个批处理脚本,该脚本可以在定时删除指定文件夹及其子文件夹的同时确保硬盘不会被占满,你可以使用以下脚本:


@echo off
set "target_folder=C:\path\to\folder"
set "days_to_keep=7"
set "max_space_to_use=50" REM 最大使用50%的硬盘空间

REM 获取目标文件夹的大小和硬盘总大小
for /d %%d in ("%target_folder%*") do (
    for /f "tokens=1,2 delims=:" %%a in ('dir /s "%%d" ^| findstr /r /c:"Size: "') do (
        set "folder_size=%%b"
    )
    for /f "tokens=1,2 delims=:" %%a in ('wmic logicaldisk where drivetype=3 ^| findstr /r /c:"Size^: "') do (
        set "total_space=%%b"
    )
)

REM 计算需要删除的文件大小和文件数量,以确保硬盘不会超过最大使用空间
set "files_to_delete=0"
set "space_to_use=0"
for /d %%d in ("%target_folder%*") do (
    for /r "%%d" %%f in (*) do (
        if /i "%%~nxf" lss "today - %days_to_keep% days" (
            set /a "files_to_delete+=1"
            for /f "tokens=1,2 delims=:" %%a in ('dir /s "%%f" ^| findstr /r /c:"Size: "') do (
                set "file_size=%%b"
            )
            set /a "space_to_use+=file_size"
        )
    )
)


REM 计算需要删除的文件数量和大小,以保持指定硬盘空间和防止硬盘被占满
set "files_to_keep=0"
set "space_to_use_bytes=%max_space_to_use% * 1024 * 1024" REM 转换为字节,这里我们假设最大使用50%的硬盘空间
:loop
if %space_to_use% gtr %space_to_use_bytes% (
    set /a "files_to_keep+=1"
    set /a "space_to_use-=space_to_use/files_to_keep" REM 减去相应的大小
    if %space_to_use% lss %space_to_use_bytes% ( REM 如果剩余空间小于允许的最大使用空间,跳出循环
        goto endscript
    ) else (
        goto loop
    )
) else (
    goto endscript
)
:endscript

echo 删除目标文件夹及其子文件夹中的早于 %days_to_keep% 天的文件...
for /d %%d in ("%target_folder%*") do (
    for /r "%%d" %%f in (*) do (
        if /i "%%~nxf" lss "today - %days_to_keep% days" del "%%f" /q /f
    )
)
echo 删除完成。共删除了 %files_to_delete% 个文件,保留了足够的硬盘空间。按任意键退出...
pause >nul

这个脚本首先获取目标文件夹的大小和硬盘的总大小。然后,它计算需要删除的文件大小和文件数量,以确保硬盘不会超过最大使用空间。接下来,它循环地删除文件,直到剩余空间等于或小于最大使用空间为止。最后,它删除早于指定天数的文件,并显示已删除的文件数量和保留的硬盘空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值