PowerShell脚本问题:如何按完整路径排除指定大文件?
解决PowerShell搜索大文件并排除指定路径的问题
问题根源
- 排除列表未正确转为数组:你的
exclude.txt是逗号分隔的单行内容,Get-Content直接读取会得到一个完整字符串,而非多个路径的数组,导致后续匹配逻辑失效。 - 匹配方式错误:
-notlike用于通配符模糊匹配,而你需要的是精确匹配完整文件路径,应该用-notin或反向检查集合包含关系。
正确实现脚本
# 读取排除文件,按逗号分割并去除每个路径的多余空格 $exclude = (Get-Content c:\exclude.txt) -split ',' | ForEach-Object { $_.Trim() } # 递归搜索C:\users下大于35GB的文件,排除指定路径 Get-ChildItem -Path c:\users -File -Recurse | Where-Object { $_.FullName -notin $exclude -and $_.Length -gt 35000000000 }
关键说明
-split ',':把单行的逗号分隔字符串拆分成独立的路径数组。ForEach-Object { $_.Trim() }:去除路径前后可能存在的空格,避免因空格导致匹配失败。-File:明确只搜索文件,跳过目录,提升执行效率。-notin:精确判断当前文件的完整路径是否不在排除列表中,确保排除逻辑生效。
额外优化建议
如果将排除文件改为每个路径单独占一行(而非逗号分隔),可以直接用$exclude = Get-Content c:\exclude.txt读取,无需分割操作,配置更直观易维护。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

