我正在尝试删除30天内传递的所有文件夹,但我需要将其基于文件夹名称而不是创建日期。生成文件并将其放入文件夹中,其中包含月份和月份日期和年份。月份格式就像MM yyyy和月份日期一样MMddyyyy。我有一个在powershell v2上运行的脚本运行良好,但在powershell V3中停止工作。
这是我的V2脚本
function Delete-Folder-30days
$today = get-date -displayhint date
$30days = (get-date).AddDays(-30)
$folders = (gci "\\$args\Apps\AndrewTest" | where-object {$_.PSIsContainer -eq $True})
foreach ($f in $folders) {
$folderdate = get-date -mont $f.Name.substring(0,2) -day $f.Name.substring(2,2) -year $f.Name.substring(4,2)
if ($folderdate)
{
Remove-Item "\\$args\Apps\AndrewTest\$f" -recurse
}
}
}
Delete-Folder-30days $Server
我在这里做错了什么?
谢谢, 安德鲁
答案 0 :(得分:1)
尝试使用[DateTime] :: ParseExact()方法,它更加简单:
function Delete-Folder-30days{
gci "\\$args\Apps\AndrewTest" -Directory | ?{[datetime]::ParseExact($_.Name,"MMddyyyy",$null) -lt (get-date).AddDays(-30)} | Remove-Item -Recurse
}
Delete-Folder-30days $Server
编辑:抱歉!如果切换了字符串和格式(应该像("04122014","MMddyyyy",$null)
)但是前两个参数被颠倒了。
Edit2:您希望它还包含.zip文件吗?有几件事情。如果要包含所有文件,那么它非常简单。只需从-Directory
命令中删除GCI
,它将查看目标目录中的所有文件和文件夹。如果你只想要文件夹和.ZIP文件,那么它会变得有点复杂。基本上我们仍然会删除-Directory开关,但是我们必须在Where子句中添加一些过滤:
?{($_.PSIsContainer -and [datetime]::ParseExact($_.Name,"MMddyyyy",$null) -lt (get-date).AddDays(-30)) -or ($_.Extension -ieq ".zip" -and [datetime]::ParseExact($_.BaseName,"MMddyyyy",$null) -lt (get-date).AddDays(-30))}
所以现在不是只检查特殊格式的日期,而是问这是一个文件夹,还是有.zip文件扩展名?如果这两个中至少有一个是真的,它是否与特殊格式的日期匹配?