功能
监测系统文件夹占用磁盘容量大小,如超过设置的容量值,则自动将其监测文件夹下的文件全部删除。
运行环境
Windows 10
注:如在 Windows 7 系统中运行,需要将脚本第二行 chcp 65001
代码删除掉,并将脚本中的中文提示改为英文。
脚本内容
@echo off & cd /d "@~dp0"
chcp 65001
set BatTitle=监测文件夹大小
color 0a & mode 55,5 & title %BatTitle%
setlocal enabledelayedexpansion
65
::设置需要监测的文件夹路径
set Folder=E:\Test
::设置最大允许的文件大小,格式为 1G 1M 1K 或dao 1B
set Size=2M
::设置延时等待时间,格式为 1h 1m 或 1s
set Interval=1m
::设置是否启用管理员权限,此功能针对开启了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! -- 监测中
!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