CMD正则匹配文件夹路径:筛选含_dn的路径并保存至文件
解决包含"_dn"的文件夹路径捕获问题
我来帮你搞定这个需求——你遇到的问题应该是现有代码只匹配了以"_dn"结尾的文件夹,漏掉了_dn目录下还有子文件夹的路径(比如C:\docs_dn\subfolder这种)。下面是两种能覆盖所有场景的实现方案:
1. PowerShell 脚本(Windows环境首选)
直接用PowerShell递归遍历并筛选所有路径中包含_dn的文件夹,然后导出到文件:
# 替换成你的目标根目录和输出文件路径 $rootPath = "D:\Your\Target\Directory" $outputFile = "D:\dn_folders_list.txt" Get-ChildItem -Path $rootPath -Directory -Recurse | Where-Object { $_.FullName -match "_dn" } | Select-Object -ExpandProperty FullName | Out-File -FilePath $outputFile -Encoding UTF8
关键细节:
-Directory只找文件夹,不会混入文件路径-Recurse深入遍历所有子目录,不会漏掉嵌套的文件夹$_.FullName -match "_dn"匹配任意位置包含_dn的完整路径,不管_dn是在路径中间还是结尾,也不管后面有没有更多子文件夹- 用
UTF8编码输出,避免中文或特殊字符乱码
2. Python 脚本(跨平台通用)
如果需要跨Windows/Linux/macOS使用,Python脚本更灵活:
import os def collect_dn_folders(root_dir, output_path): with open(output_path, 'w', encoding='utf-8') as output_file: # 递归遍历所有文件夹 for current_dir, _, _ in os.walk(root_dir): # 检查当前完整路径是否包含"_dn" if "_dn" in current_dir: output_file.write(f"{current_dir}\n") # 示例调用,替换成你的路径 collect_dn_folders("/home/your/target/dir", "/home/your/dn_folders.txt")
说明:
os.walk会遍历根目录下的每一层文件夹,current_dir是当前文件夹的完整路径- 只要路径字符串里存在
_dn,就会被写入文件,完美覆盖所有符合条件的路径
为什么之前的代码会遗漏?
大概率是之前的匹配逻辑写得太严格,只抓了以_dn结尾的路径,比如用了这类错误写法:
# 错误示例:仅匹配文件夹名以_dn结尾的情况 Where-Object { $_.Name -eq "_dn" }
或者Python里的错误判断:
# 错误示例:只匹配最后一级文件夹是_dn的路径 if os.path.basename(current_dir) == "_dn":
这种写法只会捕获像C:\data_dn这样的路径,而嵌套的C:\data_dn\sub就会被漏掉,换成我们上面的任意位置匹配就解决了。
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

