如何遍历文件夹中的子文件夹,排除目录内的单个文件?
批量跳过指定类型/文件的更高效方法
Python 实现
- 按文件后缀批量跳过:用
pathlib或os.walk结合后缀集合判断,不用逐个列文件名,代码更简洁:from pathlib import Path # 定义要跳过的文件后缀 skip_suffixes = {'.lnk', '.pptx', '.xlsx', '.docx'} target_dir = Path('你的目标文件夹路径') for item in target_dir.rglob('*'): # 如果是文件且后缀在跳过列表里,直接跳过 if item.is_file() and item.suffix in skip_suffixes: continue # 这里处理你需要保留的文件/文件夹 print(item) - 跳过特定文件名:把要跳过的文件名存在集合里(集合查找比列表快得多),判断时直接匹配:
skip_names = {'文件1.docx', '快捷方式.lnk', '报表.xlsx'} for item in target_dir.rglob('*'): if item.is_file() and item.name in skip_names: continue # 后续处理逻辑
PowerShell 实现
- 利用原生命令的过滤参数直接排除指定类型:
$skipSuffixes = @('.lnk', '.pptx', '.xlsx', '.docx') Get-ChildItem -Path "你的目标文件夹路径" -Recurse | Where-Object { # 保留文件夹,同时排除指定后缀的文件 $_.PSIsContainer -or $_.Extension -notin $skipSuffixes } - 跳过特定文件名:
$skipNames = @('文件1.docx', '快捷方式.lnk', '报表.xlsx') Get-ChildItem -Path "你的目标文件夹路径" -Recurse | Where-Object { $_.PSIsContainer -or $_.Name -notin $skipNames }
命令提示符(CMD)
- 用
for /r循环结合findstr反向过滤指定后缀:
注:for /r "你的目标文件夹路径" %f in (*) do @echo %f | findstr /v /i "\.lnk$\|\.pptx$\|\.xlsx$\|\.docx$"/v表示反向匹配,只输出不符合后缀规则的文件;/i表示忽略大小写。
核心优化点
- 按后缀过滤优先:如果是同一类型的文件,直接用后缀匹配比列单个文件名高效得多,代码也更易维护;
- 用集合存跳过项:不管是后缀还是文件名,用集合(Python)或哈希表(PowerShell)存储,查找速度远快于列表,文件数量大时差异明显;
- 利用工具原生功能:各语言/命令行工具都有内置的过滤、排除参数,直接调用比自己写遍历判断更简洁高效。
内容的提问来源于stack exchange,提问作者Nayasaal
相关产品推荐
相关产品推荐

