windows上Bat脚本,轮询监视目录文件大小,超过上限就删除该目录下所有目录和文件

 把目录和大小改成你自己的,就可以了,然后加入开机自启动的任务里面。备注很详细

@echo off & cd /d "%~dp0"
set BatTitle=50G 
color 0a & mode 55,5 & title %BatTitle%
setlocal enabledelayedexpansion
 
::设置需要监测的文件夹路径
set Folder=E:\KNIME\knime server\workflow_repository\jobs
 
::设置最大允许的文件大小,格式为 1G 1M 1K 或 1B
set Size=49G
 
::设置延时等待时间,格式为 1h 1m 或 1s
set Interval=1h
 
::设置是否启用管理员权限,此功能针对开启了UAC保护机制的系统,
::如果要对有权限的文件(夹)进行处理,可能需要开启此功能。
::数字 1 为开启,其它内容为不启用。
set UAC=0
 
if not defined Folder (
    echo 您尚未预设文件夹路径,请按任意键退出后,进行设置。
    pause>nul & exit
) else (
    if not exist "!Folder!" (
        echo 您预设的文件夹路径不存在,请按任意键退出后,进行设置。
        pause>nul & exit
    ) else (
        dir /ad "!Folder!" >nul 2>nul || (
            echo 您预设的路径不是文件夹,请按任意键退出后,进行设置。
            pause>nul & exit
        )
    )
)
 
if not defined Size (
    echo 您尚未预设文件大小,请按任意键退出后,进行设置。
    pause>nul & exit
)
 
if /i "!Size:~-1!"=="G" (
    set Size=!Size:~,-1!
    set /a Size*=1073741824
) else (
    if /i "!Size:~-1!"=="M" (
        set Size=!Size:~,-1!
        set /a Size*=1048576
    ) else (
        if /i "!Size:~-1!"=="K" (
            set Size=!Size:~,-1!
            set /a Size*=1024
        ) else (
            if /i "!Size:~-1!"=="B" (
                set Size=!Size:~,-1!
            ) else (
                echo 您预设的文件大小格式不符合标准,请按任意键退出后,进行重新设置。
                pause>nul & exit
            )
        )
    )
)
 
 
if not defined Interval (
    echo 您尚未预设延迟等待时间,请按任意键退出后,进行设置。
    pause>nul & exit
)
 
if /i "!Interval:~-1!"=="h" (
    set Interval=!Interval:~,-1!
    set /a Interval*=3600
) else (
    if /i "!Interval:~-1!"=="m" (
        set Interval=!Interval:~,-1!
        set /a Interval*=60
    ) else (
        if /i "!Interval:~-1!"=="s" (
            set Interval=!Interval:~,-1!
        ) else (
            echo 您预设的延迟等待时间格式不符合标准,请按任意键退出后,进行重新设置。
            pause>nul & exit
        )
    )
)
 
if exist "%SystemRoot%\System32\timeout.exe" (
    set WaitTime=timeout /t %Interval% /nobreak
) else (
    if exist "%SystemRoot%\System32\waitfor.exe" (
        set WaitTime=waitfor WaitTime /t %Interval%
    ) else (
        if exist "%SystemRoot%\System32\cscript.exe" (
            set "YMQY=!AppData!\YiMengQinYao"
            if not exist "!YMQY!" md "!YMQY!"
            (echo On Error Resume Next
            echo Wscript.Sleep WScript.Arguments^(0^) * 1000
            echo Wscript.Quit)>"!YMQY!\WaitTime.vbs"
            set WaitTime=cscript /nologo "!YMQY!\WaitTime.vbs" "!Interval!"
        ) else (
            if exist "%SystemRoot%\System32\ping.exe" (
                set /a Interval+=2
                set WaitTime=ping 127.0.0.1 -n "!Interval!"
            ) else (
                echo 当前系统缺少用于延时等待的相关进程,按下任意
                echo 键后,脚本会继续执行,但不会启用延时功能。
                pause>nul
            )
        )
    )
)
 
if "%UAC%"=="1" goto GetAdmin
 
:Loop
cls & title !BatTitle! -- 正在监测中
if defined Count (
    echo 已监测 !Count! 次。
    echo,
)
set AllSize=0
for /f "delims=" %%a in ('dir /a-d/s/b/o-s "%Folder%\*" 2^>nul') do (
    set /a AllSize+=%%~za
    if !AllSize! gtr !Size! goto EmptyFolder
)
goto WaitTime
 
:EmptyFolder
title !BatTitle! -- 正在删除中
rd /s /q "%Folder%" >nul 2>nul || (
    echo 文件(夹)可能被占用无法正常删除。
)
 
:MdDir
if not exist "%Folder%" (
    md "%Folder%"
) else (
    goto WaitTime
)
goto MdDir
 
:WaitTime
title !BatTitle! -- 等待中
echo 正在等待下一次检测。
!WaitTime! >nul 2>nul
set /a Count+=1
goto Loop
 
:GetAdmin
>nul 2>&1 "%SystemRoot%\System32\cacls.exe" "%SystemRoot%\System32\config\SYSTEM"
if '%errorlevel%' NEQ '0' (
    echo 正在请求临时管理员权限...
    goto UACPrompt
) else ( goto Loop )
 
:UACPrompt
start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0","","runas",1)(window.close)&&exit

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值