【发布时间】:2016-10-31 07:10:21
【问题描述】:
我需要以编程方式(最好使用 Powershell)从文件夹中删除一些超过给定天数的文件。
我已经编写了一个简单的脚本来执行此操作,但是我遇到的问题是,由于文件夹中的文件数量庞大,即使开始删除它似乎也遇到了麻烦。
我可能正在寻找一种批量删除的方法。所以它可能会得到前 1000 个,删除,然后以此类推。
目前,该文件夹可能有几十万个文件,几乎不可能遍历。
Param(
[Parameter(Mandatory=$true)][string]$Path,
[Parameter(Mandatory=$true)][string]$DaysToDelete
)
$limit = (Get-Date).AddDays($DaysToDelete)
$LogFile = "FileCleanupLog-$(Get-Date -f yyyyMMdd_HH_mm_ss).txt";
function Log-Message
{
Param ([string]$logtext)
Add-content $LogFile -value $logtext
}
If (-Not (Test-Path $Path))
{
Write-Host "Invalid Path provided!" -ForegroundColor Red
Exit
}
$files = Get-ChildItem -Path $Path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit }
If ($files.Count -GT 1) {
$files | % {$directory=$_.DirectoryName;(Log-Message "Deleting File $directory\$_");$_ } | Remove-Item -Force
}
【问题讨论】:
-
您是否尝试过像
get-childitem . | select -first 100那样将get-childitem 传递给SELECT?您需要发布您当前拥有的脚本。 -
我已经写了一个简单的脚本来做这个也许你应该包括你到目前为止所尝试的。现在这读起来就像是一个关于 codez 的问题。在大多数情况下,我们在这里帮助修复或改进现有代码。即使你是“分批”做的,除非你使用工作或其他东西,否则你仍然会一次做一个。您在寻找进度指示吗?让它运行并做它的事情有什么害处?如果做得足够多,只有第一遍会很糟糕。我最近做了一项任务来执行此操作,但第一次运行删除了 500 万个文件需要几个小时。现在运行良好。
-
如果您现有的代码有逻辑错误,也许我们可以修复这些错误并显示您可能出错的地方。
-
您是否考虑过 robocopy?您可以将其配置为在完成后给您一个报告。
-
我不在电脑附近,但如果没有其他人回答 robocopy 解决方案,我稍后会
标签: powershell filesystems delete-file