PowerShell脚本需求:筛选含文件目录、提取文件名并合并输出
PowerShell 脚本实现方案
直接上可运行的脚本,完全匹配你的需求:
# 定义可配置参数:目标根路径、要筛选的文件扩展名、输出文件路径(可选) param( [string]$RootPath = "C:\Users\UserName\Desktop\Script\Main Folder", [string[]]$TargetExtensions = @(".txt", ".jpg"), [string]$OutputFile ) # 递归筛选包含目标文件的子目录 $targetDirs = Get-ChildItem -Path $RootPath -Directory -Recurse | Where-Object { # 只检查当前目录下是否存在指定类型的文件,不递归子目录 (Get-ChildItem -Path $_.FullName -File | Where-Object { $TargetExtensions -contains $_.Extension }).Count -gt 0 } # 整理输出内容 $outputLines = @() foreach ($dir in $targetDirs) { # 替换路径前缀为...,用Escape避免正则特殊字符干扰 $shortDir = $dir.FullName -replace [regex]::Escape("C:\Users\UserName\Desktop"), "..." # 提取当前目录下的目标文件名(不带路径) $files = Get-ChildItem -Path $dir.FullName -File | Where-Object { $TargetExtensions -contains $_.Extension } | Select-Object -ExpandProperty Name # 按要求拼接格式:目录行 → 空行 → 文件名 → 组间空行 $outputLines += $shortDir $outputLines += "" $outputLines += $files $outputLines += "" } # 移除最后一行多余的空行 if ($outputLines[-1] -eq "") { $outputLines = $outputLines[0..($outputLines.Count-2)] } # 输出到控制台+可选文件 $outputLines | ForEach-Object { Write-Host $_ } if ($OutputFile) { $outputLines | Out-File -Path $OutputFile -Encoding UTF8 }
功能细节说明
- 目录筛选:递归遍历所有子目录,只保留包含
.txt/.jpg(可自定义)文件的目录,避免空目录或不符合要求的目录混入 - 路径简化:用正则转义处理路径前缀,确保替换准确,不会因为路径里的特殊字符出错
- 文件名提取:直接获取文件的
Name属性,自动去掉路径部分 - 格式控制:严格按照“目录行后空行、不同目录组间空行”的要求排版,最后自动清理多余空行
- 输出灵活:默认在控制台打印结果,也可以通过
-OutputFile参数指定输出到文本文件
使用示例
- 默认参数运行:
.\YourScriptName.ps1 - 自定义扩展名和输出文件:
.\YourScriptName.ps1 -TargetExtensions @(".txt", ".png", ".gif") -OutputFile "D:\result.txt"
输出效果示例
...\Script\Main Folder\Travel Photos beach.jpg travel_note.txt ...\Script\Main Folder\Work Docs meeting_notes.txt project_chart.jpg
内容的提问来源于stack exchange,提问作者Dega419
相关产品推荐
相关产品推荐

