使用 PowerShell 脚本删除文件
Deleting files with PowerShell script
我在 PowerShell 中有一个脚本,用于扫描按以下约定命名的文件夹目录:yyyymmdd。它扫描目录并找到所有最新的和最多一周前的文件夹,然后将它们复制到另一个目录。将它们复制到另一个目录后,我想让它删除新目录中以相同方式命名且早于 18 个月的文件夹。有没有简单的方法可以做到这一点?我已经在下面粘贴了脚本。
$targetdirectory = "\DPR320-W12-1600\PRTG"
$sourcedirectory = "C:\Users\Public\Documents\PRTG Traffic Grapher"
$todaysdate=get-date
$minusoneweek=$todaysdate.adddays(-7)
$minusdate=($minusoneweek.Month).tostring(),($minusoneweek.day).tostring(),($minusoneweek.year).tostring()
$todaysdatestring=($todaysdate.Month).tostring(),($todaysdate.day).tostring(),($todaysdate.year).tostring()
$oldfilename=$minusdate[0]+$minusdate[1]+$minusdate[2]+" backup"
$newfilename=$todaysdatestring[0]+$todaysdatestring[1]+$todaysdatestring[2]+" backup"
Get-ChildItem $sourcedirectory\config | Where-Object {
$_.PsIsContainer -and
$_.BaseName -match '\d{6}' -and
([DateTime]::ParseExact($_.BaseName, 'yyyyMMdd', $null) -gt (Get-Date).AddDays(-7))
} |Copy-Item -Recurse -Force -Destination $targetdirectory$oldfilename\config
Copy-Item -Force $sourcedirectory\config.csv -Destination $targetdirectory$oldfilename
Copy-Item -Force $sourcedirectory\config.prtg -Destination $targetdirectory$oldfilename
rename-item $targetdirectory$oldfilename $newfilename
假设 $targetDirectory
包含您要删除的文件(超过 18 个月的文件),只需将此添加到脚本的末尾:
#resolve this day, 18 months ago
Months = (get-date).AddMonths(-18)
#get the name in the right format (i.e. 20141224)
MonthString = get-date -Date Months -UFormat "%Y%m%d"
#find the files with a name like this and delete them
$OldPrtgFiles = dir $targetDirectory | Where Name -like "MonthString*"
$OldPrtgFiles | remove-item -whatif
第一次执行将显示 -WhatIf
视图,向您显示哪些文件将被删除。如果您对此感到满意,请删除 WhatIf
。
根据您与 FoxDeploy 的讨论:
这将遍历 $YourDirectory 并检查该名称是否表示早于 18 个月的日期。
将其用于我自己的清理,除了我的名称采用点分格式。
$CleanupList = Get-ChildItem $YourDirectory
$Threshold = (get-date).AddMonths(-18)
foreach ($DirName in $CleanupList)
{
If (([datetime]::ParseExact($DirName.BaseName,'yyyyMMdd',$null)) -lt $Threshold)
{
Remove-Item $DirName.FullName -Force -Recurse
}
}
我在 PowerShell 中有一个脚本,用于扫描按以下约定命名的文件夹目录:yyyymmdd。它扫描目录并找到所有最新的和最多一周前的文件夹,然后将它们复制到另一个目录。将它们复制到另一个目录后,我想让它删除新目录中以相同方式命名且早于 18 个月的文件夹。有没有简单的方法可以做到这一点?我已经在下面粘贴了脚本。
$targetdirectory = "\DPR320-W12-1600\PRTG"
$sourcedirectory = "C:\Users\Public\Documents\PRTG Traffic Grapher"
$todaysdate=get-date
$minusoneweek=$todaysdate.adddays(-7)
$minusdate=($minusoneweek.Month).tostring(),($minusoneweek.day).tostring(),($minusoneweek.year).tostring()
$todaysdatestring=($todaysdate.Month).tostring(),($todaysdate.day).tostring(),($todaysdate.year).tostring()
$oldfilename=$minusdate[0]+$minusdate[1]+$minusdate[2]+" backup"
$newfilename=$todaysdatestring[0]+$todaysdatestring[1]+$todaysdatestring[2]+" backup"
Get-ChildItem $sourcedirectory\config | Where-Object {
$_.PsIsContainer -and
$_.BaseName -match '\d{6}' -and
([DateTime]::ParseExact($_.BaseName, 'yyyyMMdd', $null) -gt (Get-Date).AddDays(-7))
} |Copy-Item -Recurse -Force -Destination $targetdirectory$oldfilename\config
Copy-Item -Force $sourcedirectory\config.csv -Destination $targetdirectory$oldfilename
Copy-Item -Force $sourcedirectory\config.prtg -Destination $targetdirectory$oldfilename
rename-item $targetdirectory$oldfilename $newfilename
假设 $targetDirectory
包含您要删除的文件(超过 18 个月的文件),只需将此添加到脚本的末尾:
#resolve this day, 18 months ago
Months = (get-date).AddMonths(-18)
#get the name in the right format (i.e. 20141224)
MonthString = get-date -Date Months -UFormat "%Y%m%d"
#find the files with a name like this and delete them
$OldPrtgFiles = dir $targetDirectory | Where Name -like "MonthString*"
$OldPrtgFiles | remove-item -whatif
第一次执行将显示 -WhatIf
视图,向您显示哪些文件将被删除。如果您对此感到满意,请删除 WhatIf
。
根据您与 FoxDeploy 的讨论: 这将遍历 $YourDirectory 并检查该名称是否表示早于 18 个月的日期。 将其用于我自己的清理,除了我的名称采用点分格式。
$CleanupList = Get-ChildItem $YourDirectory
$Threshold = (get-date).AddMonths(-18)
foreach ($DirName in $CleanupList)
{
If (([datetime]::ParseExact($DirName.BaseName,'yyyyMMdd',$null)) -lt $Threshold)
{
Remove-Item $DirName.FullName -Force -Recurse
}
}