我有一个通过目录递归的小脚本。任何超过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"
}
发布于 2014-02-13 23:12:23
我的问题是安德鲁·莫顿(谢谢!)指出我没有正确地转换我的变量。我需要比较日期时间变量,而不是比较字符串。以下是固定的工作代码:
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"
}
https://stackoverflow.com/questions/21767338
复制相似问题