PowerShell新手求教:如何读取文件夹及子文件夹中指定文件名的CSV文件
解决方法
可行代码
先给你能直接用的代码,替换目标文件夹路径即可:
# 替换成你的目标文件夹实际路径 $logfiles = "C:\Your\Target\Directory" # 递归查找所有文件名包含"honey"的CSV文件 $targetFiles = Get-ChildItem -Path $logfiles -Filter *.csv -Recurse | Where-Object { $_.Name -like "*honey*" } # 遍历文件并输出内容 foreach ($file in $targetFiles) { # 打印文件路径方便区分 Write-Host "`n--- 以下是 $($file.FullName) 的内容 ---" Get-Content -Path $file.FullName }
原代码的问题分析
- 未遍历子文件夹:
Get-ChildItem默认只检索当前文件夹,必须加-Recurse参数才会遍历所有子目录 - 未筛选文件名:原代码仅过滤了
.csv后缀,没有筛选文件名包含"honey"的文件,需要用Where-Object { $_.Name -like "*honey*" }实现(*是通配符,匹配任意字符) - 循环语法错误:
$i g-t $files.Count是拼写错误,正确的比较运算符是-lt(小于),而且PowerShell遍历集合更推荐用foreach循环,比传统for循环更简洁不易出错 - 逻辑倒置:原代码是读取文件后过滤含
honey[5]的行,但你的需求是先找文件名含honey的CSV,再显示文件内容,这部分逻辑搞反了
可选:如果需要过滤文件内容中的特定行
如果你同时需要只显示文件中包含honey[5]的行,修改Get-Content部分即可(注意正则转义,[是特殊字符,要加\转义):
Get-Content -Path $file.FullName | Where-Object { $_ -match 'honey\[5\]' }
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

