I write a script that removes backups older than five days. I check it by the name of the directory and not the actual date.
How do parse the directory name to a date to compare them?
Part of my script:
...
foreach ($myDir in $myDirs)
{
$dirName=[datetime]::Parse($myDir.Name)
$dirName= '{0:dd-MM-yyyy}' -f $dirName
if ($dirName -le "$myDate")
{
remove-item $myPath\$dirName -recurse
}
}
...
Maybe I do something wrong, because it still does not remove last month's directories.
The whole script with Akim's suggestions is below:
Function RemoveOldBackup([string]$myPath)
{
$myDirs = Get-ChildItem $myPath
if (Test-Path $myPath)
{
foreach ($myDir in $myDirs)
{
#variable for directory date
[datetime]$dirDate = New-Object DateTime
#check that directory name could be parsed to DateTime
if([datetime]::TryParse($myDir.Name, [ref]$dirDate))
{
#check that directory is 5 or more day old
if (([DateTime]::Today - $dirDate).TotalDays -ge 5)
{
remove-item $myPath\$myDir -recurse
}
}
}
}
Else
{
Write-Host "Directory $myPath does not exist!"
}
}
RemoveOldBackup("E:\test")
Directories names are, for example, 09-07-2012, 08-07-2012, ..., 30-06-2012, and 29-06-2012.
[DateTime] $a = New-Object DateTime; [DateTime]::TryParse("29-06-2012", [ref]$a); $a; ([DateTime]::Today - $a) -ge 5; 2.[DateTime]::TryParseExact("29-06-2012", "dd-MM-yyyy", [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::None, [ref]$a); $a; 3.[DateTime]::TryParseExact("29-06-2012", "dd-MM-yyyy", [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::None, [ref]$a); ([DateTime]::Today - $a) -ge 5. All sould be without errors.