Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 按文件夹名称删除30天以前的文件_Date_Powershell - Fatal编程技术网

Date 按文件夹名称删除30天以前的文件

Date 按文件夹名称删除30天以前的文件,date,powershell,Date,Powershell,我正在尝试删除所有超过30天的文件夹,但我需要根据文件夹名称而不是创建日期来删除。生成文件并将其放入文件夹中,文件夹上有月份,其中有月份日期和年份。月份格式类似于MM yyyy,月份日期类似于MMddyyyy。我有一个脚本在powershell v2中工作,它工作得很好,但在powershell V3中停止工作 这是我的V2脚本 function Delete-Folder-30days $today = get-date -displayhint date $30days = (get-da

我正在尝试删除所有超过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
我在这里做错了什么

谢谢,
Andrew

尝试使用[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文件吗?有几件事。如果你想包括所有的文件,那么它真的很简单。只需从
GCI
命令中删除
-Directory
,它将查看目标目录中的所有文件和文件夹。如果您只需要文件夹和.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文件扩展名?如果这两个选项中至少有一个是正确的,那么它是否与特殊格式的日期匹配?

它到底是如何“停止工作”的?你有错误吗?
$folderdate
的值是否正确?当我在V2中运行它时,它将删除目录中的所有内容,当它在V3中运行时,我收到一个错误,说它找不到路径找不到路径“\\plbuadrhqttctc099\TransXtest\”,因为它不存在。一些事情可能会出错。你少了一个括号,我假设一年是4个字符,而不是2个字符。但是,从2.0到3.0没有什么不同。删除所有内容的原因是因为您正在说如果($folderdate)。。。如果$folderdate不为0,则该值为真,因此其始终为真的Mont足以唯一标识-Month,因此这应该可以正常工作。这一年的事情会给他带来麻烦,除非他试图在基督的有生之年找到一些东西(
-14年
将产生0014年的日期,而不是我假设你打算的2014年)。正确,文件夹的日期格式为MMddyy,我无法使用创建日期作为源来删除它们,因为有时可能会在一天后创建日期更早的文件。我尝试将-year改为(4,4),并将一些测试名称改为MMddyyyy,但它仍然删除了所有内容。我的错误是“字符串未被识别为有效的日期时间”,我已更新了答案。我切换了ParseExact()的前两个参数。这非常有效,这样我就可以保持文件夹格式为MMddyy。谢谢如果这个答案对你有效,请将其标记为已接受,以方便将来有类似问题的用户。尽管可以,快速提问。有没有办法让它删除同名的zip文件夹?