Skip to main content

PowerShell cmdlet script to delete old files based on the file's extension (e.g. "*.pdf").

<#
.SYNOPSIS

    Delete old files.

.DESCRIPTION

    Deletes the specified files based on the file's extension (e.g. "*.pdf")
    and creation date.

    Files are deleted recusively, starting from the specified "-DeleteFilesPath"
    parameter.

.EXAMPLE

    To delete PDF files older than 7 days in the specified -DeleteFilesPath.

        .\cleanup-old-files.ps1 `
            -DeleteFilesPath "C:\path\to\target\dir" `
            -FileFilter "*.pdf" `
            -MaxAgeAsDays 7

.EXAMPLE

    To show which files would be deleted (dry-run):

        .\cleanup-old-files.ps1 `
            -DeleteFilesPath "C:\path\to\target\dir" `
            -FileFilter "*.pdf" `
            -MaxAgeAsDays 7 `
            -WhatIf
#>
[CmdletBinding(SupportsShouldProcess=$true)]
    param
    (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $DeleteFilesPath,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $FileFilter,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [int] $MaxAgeAsDays = 7
    )
Get-ChildItem -Path $DeleteFilesPath -File -Filter $FileFilter -Recurse -Force -ErrorAction SilentlyContinue | `
    where CreationTime -lt (Get-Date).AddDays(-$MaxAgeAsDays) | `
    Remove-Item -Force -ErrorAction SilentlyContinue


# -------------------------------------------------------------------------------------
# Call/run delete-old-files.ps1 from bat/cmd script:
#
# Uncomment the following snippet and save the file as a bat script (.bat or .cmd ext)
# to call the "delete-old-files.ps1" powershell script with predefined
# paramaters, and double-click to run support.
# -------------------------------------------------------------------------------------

# @echo off
#
# @rem
# @rem Delete PDF files older than 7 days from "C:\path\to\target\dir"
# @rem
# @rem NOTE: You must remove the "-WhatIf" option from the command below
# @rem to perform the actual deletion.
# @rem
#
# powershell.exe -ExecutionPolicy Bypass -NoProfile -NoLogo ^
#     -Command "& '%~dp0delete-old-files.ps1' -DeleteFilesPath 'C:\path\to\target\dir' -FileFilter '*.pdf' -MaxAgeAsDays 7 -WhatIf"