我有一个通过目录递归的小脚本。应删除任何超过X天的文件。
这适用于当年,但它没有看到或从2013年删除文件。我在想$ _. LastWriteTime和(Get-Date).AddDays()之间的日期比较不知何故不是相同类型(或以这种方式出现)。
在我的源代码中,我打印文件名信息,而不是真正删除文件以进行测试。另外,当我运行时,我的实际文件结构如下所示:
Get-ChildItem -Path $myPath -Recurse -Force | % { Write-Host $_.FullName " - " $_.LastWriteTime }
代码:
param([String]$myPath="")
$limit = (Get-Date).AddDays(-33).ToShortDateString()
Write-Host "Looking in : $myPath"
Write-Host "Purging anything older than : $limit"
if ($myPath.length -gt 0) {
Get-ChildItem -Path $myPath -Recurse -Force | Where-Object { $_.LastWriteTime.ToShortDateString() -lt $limit } | % { Write-Host $_.FullName " - " $_.LastWriteTime.ToShortDateString() }
} else {
Write-Host "Source path not passed. Please pass the source path to purge"
}
答案 0 :(得分:0)
我的问题安德鲁莫顿(谢谢!)指出我没有正确地投射我的变量。我不需要比较字符串,而是需要比较日期时间变量。这是固定的工作代码:
param([String]$myPath="")
$limit = [datetime](Get-Date).AddDays(-33)
Write-Host "Looking in : $myPath"
Write-Host "Purging anything older than : $limit"
if ($myPath.length -gt 0) {
Get-ChildItem -Path $myPath -Recurse -Force | Where-Object { [datetime]$_.LastWriteTime -lt $limit } | % { Write-Host $_.FullName " - " $_.LastWriteTime.ToShortDateString() }
} else {
Write-Host "Source path not passed. Please pass the source path to purge"
}