文件系统非递归搜索问题:PowerShell脚本未按预期限制搜索范围
解决PowerShell仅搜索父目录CSV文件、忽略子目录的问题
嘿,我一眼就发现你脚本里的问题了——你把"*.csv"当成第二个路径参数传给Get-ChildItem了,而不是用来筛选当前目录下的文件。这就导致哪怕加了-Depth 0,命令的行为也完全不符合预期。
修正后的脚本(推荐方案)
用-Filter参数指定CSV文件类型是最高效的方式,因为过滤器会直接在文件系统层面生效,减少PowerShell后续的处理开销:
Get-ChildItem -File -Path "\\flamingdev\files\inbound\" -Filter "*.csv" -Depth 0 | Select-Object -ExpandProperty FullName | Add-Content -Path "\\flamingdev\files\input\files.txt"
为什么原来的脚本不行?
你原来的写法-Path "\\flamingdev\files\inbound\","*.csv"会让PowerShell把"*.csv"当作一个独立的路径去解析。它会先搜索\\flamingdev\files\inbound\下的内容,然后再尝试找名为*.csv的路径(显然不存在),这种混乱的参数传递直接打乱了-Depth 0的作用逻辑,导致命令意外遍历了子目录。
另一种灵活的方案(适合多扩展名筛选)
如果以后你需要同时筛选多种文件类型(比如.csv和.txt),可以用-Include参数,但要注意把路径写成"\\flamingdev\files\inbound\*"(表示目录下的所有项),再搭配-Depth 0:
Get-ChildItem -File -Path "\\flamingdev\files\inbound\*" -Include "*.csv" -Depth 0 | Select-Object -ExpandProperty FullName | Add-Content -Path "\\flamingdev\files\input\files.txt"
这样写之后,-Depth 0就会正确限制命令只搜索\\flamingdev\files\inbound\的直接子项(也就是父目录下的文件),完全忽略所有子目录。
内容的提问来源于stack exchange,提问作者signalhouse




