如何在Get-ChildItem操作中排除指定文件夹和.log类型文件?
问题原因
原代码失效是因为Get-ChildItem的-Exclude参数在搭配-Recurse使用时,仅能匹配目标对象的名称段,无法识别完整路径规则,也不会自动排除指定目录下的所有子内容,所以无法过滤掉image文件夹内的文件。
修正后脚本
$WebAppFolder = 'C:\ReleaseBackupScript\MyWebSite' # 递归获取所有文件后通过两层规则过滤 $filteredList = Get-ChildItem -Path $WebAppFolder -Recurse -Force -File | Where-Object { # 排除所有存放在image目录下的文件 $_.FullName -notlike "$WebAppFolder\image\*" -and # 排除后缀为.log的文件 $_.Extension -ne '.log' } | Select-Object -ExpandProperty FullName # 输出过滤后的文件列表到文本 Out-File -FilePath FilteredList.txt -InputObject $filteredList
注:代码里加了
-File参数只获取文件,过滤掉文件夹对象,如果需要保留文件夹可以移除该参数。
可选:直接生成压缩包
如果不需要保留中间文件列表,可以直接将过滤结果传给压缩命令:
$WebAppFolder = 'C:\ReleaseBackupScript\MyWebSite' $backupPath = 'C:\Backup\website_backup.zip' # 替换为你实际的备份包路径 Get-ChildItem -Path $WebAppFolder -Recurse -Force | Where-Object { $_.FullName -notlike "$WebAppFolder\image\*" -and $_.Extension -ne '.log' } | Compress-Archive -DestinationPath $backupPath -Force
内容的提问来源于stack exchange,提问作者Muhammedh
相关产品推荐
相关产品推荐

