我有一个PowerShell脚本,用于从根文件夹及其SubFolders中删除所有类型的文件,这些文件的历史超过x天。这很好,但是现在我想从删除过程中排除两个子文件夹。尝试过排除命令,但是由于我不熟悉Powershell,所以我很难使它正确。
PowerShell version: 5.1文件夹结构(希望从删除过程中排除SubDir 2和SubDir3 )
MainDir
|
SubDir1 -> Folder1 -> Folder2 -> Zip/CSV files
SubDir2 -> Folder1 ->.txt files
|
Folder2 -> .txt files
SubDir3 -> Zip files
SubDir4 -> Folder1 -> zip/csv files剧本:
param([string] $dir = "C:\MainDir",
[string] $days = "15")
$error.clear()
try
{
$refDate = (Get-Date).AddDays(-$days)
Get-ChildItem -Path $dir -Recurse |
Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $refDate } |
Remove-Item -Force
}
catch {
Write-Error $_
}
if (!$error) {
Write-Host 'Data deleted for files which are older than' $days 'Days'
}发布于 2020-06-11 10:30:46
由于您使用的是PS5.1,所以可以使用-File开关,而不必在Where子句中使用!$_.PSIsContainer。
若要排除子文件夹,可以尝试以下代码:
$refDate = (Get-Date).AddDays(-$days).Date # set to midnight
$excludeFolders = 'SubDir2', 'SubDir3' # an array of folder names to exclude
# create a regex of the folders to exclude
# each folder will be Regex Escaped and joined together with the OR symbol '|'
$notThese = ($excludeFolders | ForEach-Object { [Regex]::Escape($_) }) -join '|'
Get-ChildItem -Path $dir -Recurse -File |
Where-Object { $_.DirectoryName -notmatch $notThese -and $_.LastWriteTime -lt $refDate } |
Remove-Item -Forcehttps://stackoverflow.com/questions/62321998
复制相似问题