按文件夹名称删除30天

时间:2014-07-31 15:49:49

标签: date powershell

我正在尝试删除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

我在这里做错了什么?

谢谢, 安德鲁

1 个答案:

答案 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文件扩展名?如果这两个中至少有一个是真的,它是否与特殊格式的日期匹配?