#----- define parameters -----#
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "3"
#----- define folder where files are located ----#
$TargetFolder = "C:\test2"
#----- define extension ----#
$Extension = "*.*"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)
#----- get files based on lastwrite filter and specified folder ---#
$Files = Get-ChildItem $TargetFolder -Include $Extension -Recurse |
Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files) {
if ($File -ne $NULL) {
Write-Host "Deleting File $File" -ForegroundColor "Red"
Remove-Item $File.FullName | Out-Null
} else {
Write-Host "No more files to delete!" -foregroundcolor "Green"
}
}
这是一个很好的 PowerShell 脚本,用于删除早于 X 天的文件,但我们想删除保存在不同位置且每个路径的天数不同的多个文件。
例如,如果我们必须删除超过 3 天的文件,那么我们可以像这个例子一样添加另一个位置:
$TargetFolder = "C:\test","C:\test2"
它会处理这两个文件夹,但我们想知道是否有办法为不同的文件夹设置不同的天数。
在 ksh
中,我们曾经在配置文件中这样做:
Location 1;//Server1/c$/processed;14 Location 2;//Server2/backup/;3
最佳答案
使用“年龄”和“位置”等参数调用脚本
Param
(
[int]$days,
[string]$Targetfolder
)
#----- define parameters -----#
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
#$Days = '3'
#----- define folder where files are located ----#
#$TargetFolder = 'C:\test2'
#----- define extension ----#
$Extension = '*.*'
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)
#----- get files based on lastwrite filter and specified folder ---#
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where-Object {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
write-host "Deleting File $File" -ForegroundColor 'Red'
Remove-Item $File.FullName | out-null
}
else
{
Write-Host 'No more files to delete!' -foregroundcolor 'Green'
}
}
将其保存为 .ps1 并像 MyScript.ps1 -Targetfolder C:\Blah -Days 4
那样调用它。
关于powershell - 如何从不同位置删除超过 X 天的多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046211/