Skip to content

Instantly share code, notes, and snippets.

@timgaunt
Last active July 19, 2016 11:07
Show Gist options
  • Save timgaunt/3922967 to your computer and use it in GitHub Desktop.
Save timgaunt/3922967 to your computer and use it in GitHub Desktop.
Automatically delete log files by filename pattern
@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
@timgaunt
Copy link
Author

Example usage to delete YouTrack log files: DeleteByDatePattern /D 3 "C:\teamsysdata-backup" ????-??- -??-??-??.zip /DEL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment