如何用PowerShell递归查找指定子文件夹并列出指定类型文件?
PowerShell递归查找指定子文件夹及文件的解决方案
需求说明
- 递归遍历所有文件夹,查找名为
crypted的子文件夹(可存在于任意层级) - 列出这些
crypted文件夹下的指定扩展名文件(示例为.txt),需包含完整文件路径
现有实现的局限
原脚本仅能读取list.txt中的文件夹列表,检查指定根目录下对应子路径里的crypted文件夹,无法实现无指定源目录的全局递归查找。原脚本如下:
$location = "C:\TEST\IMPORTANT" $list = "C:\TEST\list.txt" foreach($line in Get-Content $list) { if ($line -match $regex) { $FolderExist = Test-Path "$location\$line\crypted" if ($FolderExist -eq $True) { Write-Host "$line" Get-ChildItem "$location\$line\crypted" -Recurse -Include *.txt } else { Write-Host "$line does not have crypted folder" } } }
解决方案脚本
直接递归查找所有名为crypted的文件夹,再遍历这些文件夹下的指定扩展名文件:
# 可选:指定要搜索的根目录,若要搜索整个系统可设置为$env:SystemDrive(系统盘)或多个路径数组 $rootPaths = "C:\" # 可替换为需要搜索的根路径,比如@("C:\", "D:\") # 指定要筛选的文件扩展名,可多个,比如@("*.txt", "*.doc") $targetExtensions = "*.txt" # 递归查找所有名为crypted的文件夹 $cryptedFolders = Get-ChildItem -Path $rootPaths -Directory -Recurse -Filter "crypted" -ErrorAction SilentlyContinue # 遍历每个crypted文件夹,列出目标文件 foreach ($folder in $cryptedFolders) { Write-Host "找到crypted文件夹:$($folder.FullName)" Get-ChildItem -Path $folder.FullName -File -Filter $targetExtensions -ErrorAction SilentlyContinue | Select-Object FullName }
关键说明
-Directory参数限定只查找文件夹,提升搜索效率-Filter "crypted"直接定位目标文件夹名称,比-Include性能更好-ErrorAction SilentlyContinue忽略权限不足等访问错误,避免脚本中断- 通过
Select-Object FullName确保输出完整文件路径,也可直接输出对象查看更多属性
内容的提问来源于stack exchange,提问作者aaa12
相关产品推荐
相关产品推荐

