多子目录TXT文件提取路径后缀的PowerShell脚本问题
解决递归处理多TXT文件提取路径最后段的PowerShell脚本改进方案
以下是针对你的需求优化后的PowerShell脚本,能递归处理所有子目录下的TXT文件,按要求格式输出结果:
# 替换为你的目标根目录路径 $rootDir = "C:\Your\Target\Directory" Get-ChildItem -Path $rootDir -Filter *.txt -Recurse | ForEach-Object { $fullFilePath = $_.FullName $fileName = $_.Name # 逐行读取当前文件内容 Get-Content -Path $fullFilePath | ForEach-Object { # 跳过空行或空白行 if (-not [string]::IsNullOrWhiteSpace($_)) { # 提取路径最后一个\后的内容 $targetContent = Split-Path -Path $_ -Leaf # 按指定格式输出 "$targetContent $fileName $fullFilePath" } } }
关键部分说明
Get-ChildItem -Recurse:递归遍历指定根目录下所有.txt文件,确保不会遗漏子目录中的文件。- 双层
ForEach-Object:外层循环处理每个文件,内层循环处理文件中的每一行,这是解决你之前递归失效的核心——确保每个文件的每一行都被单独处理。 Split-Path -Leaf:PowerShell内置的路径处理命令,能可靠提取路径的最后一段(即最后一个\后面的内容),比手动写正则表达式更稳定,还能兼容不同格式的路径输入。- 空行过滤:通过
[string]::IsNullOrWhiteSpace跳过无内容的行,避免输出无效结果。
可选扩展
如果需要将结果保存到文件,只需在脚本末尾添加输出重定向:
| Out-File -FilePath "提取结果.txt" -Encoding UTF8
内容的提问来源于stack exchange,提问作者Wehrmicel
相关产品推荐
相关产品推荐

