繁体   English   中英

Powershell 从 CSV 中删除超过 x 天的文件

[英]Powershell to remove files from CSV older than x days

我正在尝试读取包含文件夹路径的文件列表的 CSV,如果它们早于 x 天,则将其删除。

我可以这样做是我在 csv 中列出文件夹,但不能让它只对文件起作用。

CSV

FullName,,,,,,,,,,,,,
E:\$RECYCLE.BIN\S-1-5-21-352280589-691296097-1232828436-9414\$RCUCS3H.txt,,,,,,,,,,,,,
E:\$RECYCLE.BIN\S-1-5-21-352280589-691296097-1232828436-9414\$RWF5KKJ.txt,,,,,,,,,,,,,
E:\Account Lockout Files\Alockout.zip,,,,,,,,,,,,,
E:\Account Lockout Files\AlockoutXP.zip,,,,,,,,,,,,,

PowerShell 包含。

$DatetoDelete = (Get-Date).AddDays(-3650)

Get-Content 'C:\delete\1.csv' | ForEach-Object { $_.Trim() } | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item -Force

当我使用上面的脚本时,它只会删除文件,即使它们较旧,请有人帮忙吗? 谢谢。

你几乎有你的代码,但是你错过了最后写入时间实际检查,如果你使用Get-Item获得该文件的属性,您将有LastWriteTime属性为您在您的使用Where-Object

下面应该只用一个额外的命令和一个管道来做你需要的

Get-Content 'C:\delete\1.csv' | ForEach-Object { 
$_.Trim()
Get-Item -Path $_ |Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item -Force
}

感谢您分享输入 csv 文件的示例。 我们现在可以确定它实际上是带有标题的 csv,因此,使用Get-Content是错误的 cmdlet。

尝试使用Import-Csv代替:

$DatetoDelete = (Get-Date).AddDays(-3650).Date  # set to midnight

Import-Csv -Path 'C:\delete\1.csv' | ForEach-Object {
    $file = Get-Item -Path $_.FullName -ErrorAction SilentlyContinue
    if (($file) -and $file.LastWriteTime -lt $DatetoDelete) {
        $file | Remove-Item -Force
    }
}

对于 csv 中的某些文件,您可能没有删除权限,例如E:\\$RECYCLE.BIN\\S-1-5-21-352280589-691296097-1232828436-9414 ..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM