Last active
July 19, 2016 11:07
-
-
Save timgaunt/3922967 to your computer and use it in GitHub Desktop.
Automatically delete log files by filename pattern
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@ECHO OFF | |
ECHO Delete By Date Pattern | |
ECHO Written by: Jason Faulkner | |
ECHO SysadminGeek.com (article: http://www.howtogeek.com/50528/automating-the-process-of-deleting-old-log-files/) | |
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%\system32\LogFiles" 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 EnableExtensions 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example usage to delete YouTrack log files: DeleteByDatePattern /D 3 "C:\teamsysdata-backup" ????-??- -??-??-??.zip /DEL