许多服务和程序都会生成日志文件,作为它们所做一切的审计跟踪,但是很少有功能能够在这些文件过期时删除它们。结果,这些日志文件在您的系统上占用了空间(有时比您知道的要多),并且在您需要访问它们的时候会使目录变得混乱。...
许多服务和程序都会生成日志文件,作为它们所做一切的审计跟踪,但是很少有功能能够在这些文件过期时删除它们。结果,这些日志文件在您的系统上占用了空间(有时比您知道的要多),并且在您需要访问它们的时候会使目录变得混乱。
如果你不需要这些文件,为什么要保留它们?我们将向您展示如何轻松地删除这些旧的日志文件,以保持系统整洁。
当然,虽然下面介绍的方法对于管理日志文件非常有用,但您也可以将相同的技术应用于任何其他类型的“过期”文件(例如备份)。
根据上次修改日期删除文件
如果只想根据文件的上次修改日期清除现有日志文件,则只需使用FORFILES命令。例如:
FORFILES /P “C:LogFiles” /S /D -7 /C “CMD /C DEL /F /Q @PATH”
上面的命令将删除“C:LogFiles”文件夹中的所有文件,以及上周未修改的所有子文件夹。
FORFILES命令对搜索模式和日期函数非常灵活。例如,可以输入诸如“-1/13/2010”之类的日期来代替数字,以删除在指定日期之前最后修改的文件。
要获取有关FORFILES可以执行的操作的所有详细信息,请在命令提示符下使用以下命令查看联机帮助:
FORFILES /?
根据文件名中的日期模式删除文件
许多应用程序和服务根据日期模式生成日志文件,每天只有一个日志文件(即Log100113.txt、Backup-2010-01-13.zip等)。对于这些类型的文件,最好根据文件名中包含的文件的日期而不是最后修改的日期进行删除。这对于保存过去3个月的所有日志文件等场景非常有用。不幸的是,Windows没有具有这种逻辑类型的本机命令,但是通过批处理脚本,我们可以轻松地处理此任务。
脚本的用法注释中包含了一些示例,因此应该很容易理解。
剧本
@ECHO OFF ECHO Delete By Date Pattern ECHO Written by: Jason Faulkner ECHO SysadminGeek.com ECHO. ECHO. REM Delete/Select files based on a date which utilizes MM and/or DD for file naming patterns. REM REM Usage: REM DeleteByDatePattern {/M | /D} NumberToKeep Path PatternPrefix PatternPostfix [/L | /DEL] REM /M Specifies the pattern being used is based on months. REM /D Specifies the pattern being used is based on days. REM NumberToKeep REM The number of months (/M) or days (/D) to keep, including the current. REM For example, entering 1 keeps only the current month/day and 6 would keep the current minus 5. REM Path The root location to search. Subdirectories will be searched. REM PatternPrefix REM The file search pattern placed before of the month/day when building the search string. REM PatternPostfix REM The file search pattern placed after of the month/day when building the search string. REM /L (optional) Lists all files matching the pattern, but does not delete them. REM /DEL (optional) Deletes all files matching the pattern. REM REM Examples: REM DeleteByDatePattern /M 3 "%WinDir%system32LogFiles" ex?? ??.log /DEL REM Deletes all IIS log files (Windows Server 2003) except for the current and previous two months. REM DeleteByDatePattern /D 7 "D:Backup" *-????-??- .zip /DEL REM Deletes all zip files from the D:Backup folder except for the current week. REM The file name pattern assumed above is "*-YYYY-MM-DD.zip" REM DeleteByDatePattern /M 0 "C:" *( )* /L REM Prints a list of all files on the C drive matching the pattern: "*-MM-*" (where MM is replaced with 01-12) REM DeleteByDatePattern /D 14 "C:Logs" Log-???? .txt REM Prints a list of all patterns which would be processed by the script. SETLOCAL EnableExtensi*** EnableDelayedExpansion REM Assumes your Windows Date/Time settings are set to 'DayOfWeek M/D/YYYY' format. REM If your format is different, you will need to alter the variables below so they align. FOR /F "tokens=1,2,3,4 delims=/ " %%A IN ('DATE /T') DO ( SET Month=%%B SET Day=%%C SET Year=%%D ) IF /I {%1}=={/M} ( SET Keep=%Month% SET Max=12 ) IF /I {%1}=={/D} ( SET Keep=%Day% SET Max=31 REM Working off of the previous month's max days. SET /A PrevMonth=%Month%-1 IF !PrevMonth! EQU 2 ( SET Max=28 REM Leap years... add more as needed. IF /I %Year% EQU 2012 SET Max=29 IF /I %Year% EQU 2016 SET Max=29 ) IF /I !PrevMonth! EQU 4 SET Max=30 IF /I !PrevMonth! EQU 6 SET Max=30 IF /I !PrevMonth! EQU 9 SET Max=30 IF /I !PrevMonth! EQU 11 SET Max=30 ) SET Current=%Keep% SET /A Keep=%Keep%-%2+1 REM Determine the range to be removed. SET /A RemoveHighStart=%Current%+1 IF /I %Keep% LSS 1 ( SET RemoveLow=0 SET /A RemoveHighEnd=%Keep%+%Max%-1 ) ELSE ( SET /A RemoveLow=%Keep%-1 SET RemoveHighEnd=%Max% ) REM Process all less than the low range. FOR /L %%Z IN (1,1,%RemoveLow%) DO CALL :Process %%Z %3 %4 %5 %6 REM Process all greater than the high range. FOR /L %%Z IN (%RemoveHighStart%,1,%RemoveHighEnd%) DO CALL :Process %%Z %3 %4 %5 %6 ENDLOCAL GOTO End :Process SET Key=0%1 SET Key=%Key:~-2% SET Target="%~2%~3%Key%%~4" ECHO Target Pattern: %Target% IF /I {%5}=={/L} DIR %Target% /B /S IF /I {%5}=={/DEL} DEL /F /S /Q %Target% GOTO End :End
自动化流程
FORFILES命令是Windows本机命令,但是DeleteByDatePattern脚本应该放在Path变量中定义的文件夹中(例如Windows文件夹),这样就可以像调用本机命令一样调用它。完成此操作后,您可以创建一个计划任务,该任务可以是单个命令(如果只需要从单个位置删除),也可以是批处理文件(如果需要从多个位置删除),每天、每周、每月或任何时候运行。
还有一件事你可以忘记。
链接
从Sysadmin Geek下载Delete By Date模式脚本