如何使用PowerShell提取文件路径中的文件名及扩展名并保存到新文件
PowerShell提取文件路径中的文件名与扩展名
嘿,这个需求用PowerShell处理简直手到擒来,我给你分享两种靠谱的方法,你可以根据习惯选:
方法一:使用.NET的Path类(推荐,兼容性拉满)
这个方法能完美应对各种复杂路径,比如带空格、特殊字符的情况,完全不会出错:
# 替换成你的源文件实际路径 $sourceFile = "C:\Demo\input.txt" # 替换成你想要保存结果的目标路径 $targetFile = "C:\Demo\output.txt" # 读取源文件的所有路径行 $allPaths = Get-Content -Path $sourceFile # 逐个提取文件名+扩展名 $cleanedNames = $allPaths | ForEach-Object { [System.IO.Path]::GetFileName($_) } # 将结果写入目标文件,指定UTF8编码避免乱码 $cleanedNames | Out-File -Path $targetFile -Encoding UTF8
这里划重点:[System.IO.Path]::GetFileName($_)是.NET原生的工具方法,专门用来从完整路径里剥离掉前面的目录部分,只留下带扩展名的文件名,处理各种边缘场景都稳得一批。
方法二:使用PowerShell原生的Split-Path命令
如果你更偏爱用PowerShell自带的命令,这个写法更简洁直观:
Get-Content "C:\Demo\input.txt" | ForEach-Object { Split-Path $_ -Leaf } | Out-File "C:\Demo\output.txt" -Encoding UTF8
Split-Path的-Leaf参数就是专门干这个的——直接提取路径的"最后一片叶子",也就是我们要的文件名加扩展名,用法非常直白。
额外小技巧:过滤无效行
如果你的源文件里有空白行或者无效的空路径,可以加一步过滤,确保结果干净:
Get-Content "input.txt" | Where-Object { $_ -match '\S' } | # 过滤掉空白行 ForEach-Object { [System.IO.Path]::GetFileName($_) } | Out-File "output.txt" -Encoding UTF8
内容的提问来源于stack exchange,提问作者SRP
相关产品推荐
相关产品推荐

