PowerShell中Get-ChildItem -recurse参数无法按预期工作的问题咨询
解决PowerShell查找特定文件夹下目标CSV文件的问题
问题梳理
需要完成的操作:
- 在网络路径
\\server\folder\sub1\sub2\sub3\sub4(注意:网络共享路径需以双反斜杠\\开头,避免解析错误)下,递归查找所有名称包含subx的文件夹 - 再在这些
subx文件夹的子目录中,找出所有以XX开头的.csv文件
现有命令的问题
- 语法错误:字符串变量未闭合(如
$SUB="*subx*缺少结尾双引号),直接导致执行异常 - 参数逻辑错误:
Get-ChildItem同时使用-Filter和-Include时,-Filter会优先作用于顶层路径,无法实现"先找目标文件夹再找文件"的逻辑 - 范围错误:第二个命令仅匹配
subx相关的项,但未遍历这些项的子目录;第三个命令全局查找所有CSV,未限定在subx文件夹范围内
正确实现命令
分步写法(逻辑清晰)
# 定义路径与匹配规则 $SOURCE = "\\server\folder\sub1\sub2\sub3\sub4" # 先找到所有名称含subx的文件夹 $targetFolders = Get-ChildItem -Path $SOURCE -Recurse -Directory -Filter "*subx*" # 遍历每个目标文件夹,查找其下子目录中的XX开头CSV文件 foreach ($folder in $targetFolders) { Get-ChildItem -Path $folder.FullName -Recurse -File -Filter "XX*.csv" }
管道写法(简洁高效)
$SOURCE = "\\server\folder\sub1\sub2\sub3\sub4" Get-ChildItem -Path $SOURCE -Recurse -Directory -Filter "*subx*" | ForEach-Object { Get-ChildItem -Path $_.FullName -Recurse -File -Filter "XX*.csv" }
关键参数说明
-Directory:仅筛选文件夹,避免匹配到名称含subx的文件-File:仅筛选文件,确保结果只返回CSV文件-Filter:性能优于-Include,直接调用文件系统的筛选能力,效率更高
内容的提问来源于stack exchange,提问作者Ian-F
相关产品推荐
相关产品推荐

