要修改的地方:
1、需要监测的文件夹路径
2、文件夹上限大小
3、延时等待时间(隔多久监测一次)
4、删除多久以前的数据
5、删除记录保存的位置
@echo off & cd /d "%~dp0"
set BatTitle=轮询监视
color 0a & mode 55,5 & title %BatTitle%
setlocal enabledelayedexpansion
::设置需要监测的文件夹路径
set Folder=D:\PostgreSQL\10\data\log
::设置最大允许的文件大小,格式为 1G 1M 1K 或 1B
set Size=200G
::设置延时等待时间,格式为 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 & ex
)
)
)
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
)
)
)
)
: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! -- 正在删除中
forfiles /p "%Folder%" /s /m *.log /d -2 /c "cmd /c del @file"
set date_time= %date:~0,4%%date:~5,2%%date:~8,2% %time:~0,2%%time:~3,2%%time:~6,2%
echo 轮询监测程序已于 !date_time! 删除两天前log文件>> "D:\PostgreSQL\10\data\log.txt"
: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
:UACPrompt
start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0","","runas",1)(window.close)&&exit
参考资料:
https://blog.csdn.net/weixin_33744141/article/details/91605746
https://blog.csdn.net/qq_36622490/article/details/104052000