我正在尝试删除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
我在这里可能做错了什么?
谢谢,安德鲁
尝试使用[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
编辑:对不起!如果将String和Format切换了(应该像("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文件扩展名?如果这两个条件中至少有一个是正确的,那么它是否与特殊格式的日期匹配?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句