Re: [問題] PS移除目錄過期的檔案但要保留其中幾個

作者: Tabrith (血糖瑪琪朵)   2018-09-28 02:55:10
: #notlike
: $before=(Get-Date).AddDays(-30) $exfolder=('C:\TEST\A*' , 'C:\TEST\B*')
: Get-ChildItem -path 'C:\TEST' -Recurse
: Where-Object {($_.LastWriteTime -lt $before ) -and ( $_.FullName -notlike
: $exfolder)} |
: Remove-Item -force -Recurse
-notlike 記得是不收 array,
這段如果把 $exfolder 改成 string:
$exfolder='C:\TEST\A*'
FullName -notlike 的效果就會出來,但只能篩掉 A 資料夾。
: #exclude
: $before=(Get-Date).AddDays(-30)
: $exfolder=('C:\TEST\A*' , 'C:\TEST\B*' )
: Get-ChildItem -path 'C:\TEST' -Recurse -Exclude $exfolder
: Where-Object { $_.LastWriteTime -lt $before } |
: Remove-Item -force -Recurse
這段把 $exfolder 改成
$exfolder=('A*','B*')
就能得到你要的結果,這應該是比較好的做法。
另外,如果你覺得日後這些規則會經常做調整的話,那還是用 regex 來控制比較方便,
(只是比較沒實踐到 Filter Left Format Right 的精神):
$regex = 'c:\\test\\(A|B)'
Get-ChildItem -Path 'C:\TEST' -Recurse | Where-Object{$_.FullName -notmatch
$regex}
大概是這樣,有錯請指正~

Links booklink

Contact Us: admin [ a t ] ucptt.com