PowerShell 5.1含法语重音字符路径的Get-ChildItem查询问题求助
解决PowerShell 5.1中含é字符路径的文件查找问题
问题根源
核心问题出在CSV文件读取的编码不匹配:PowerShell 5.1的Import-Csv默认用系统ANSI编码读取文件,若你的CSV是UTF-8编码(无论有无BOM),带é的字符会被错误解析,导致后续路径里的é变成�,自然找不到目标文件。之前改代码页、加\?\前缀的操作没触碰到根源,所以没效果。
解决方案
1. 先修正CSV读取的编码
读取CSV时明确指定UTF-8编码,确保路径里的é能正确保留:
# 如果CSV是带BOM的UTF-8 $paths = Import-Csv -Path "你的CSV文件路径.csv" -Encoding UTF8 # 如果CSV是无BOM的UTF-8,PowerShell 5.1需用.NET编码对象指定 $paths = Import-Csv -Path "你的CSV文件路径.csv" -Encoding ([System.Text.Encoding]::UTF8)
修正后再用Write-Host $item.location验证,确认é显示正常,之后直接用Get-ChildItem即可,不需要加\?\前缀:
Get-ChildItem -LiteralPath $item.location -File -Recurse
2. 用.NET方法绕开PowerShell cmdlet的编码问题
如果修正编码后仍有异常,直接调用.NET的文件枚举方法,它对Unicode路径的支持更稳定:
$targetPath = $item.location # 递归枚举所有文件,返回完整路径 $filePaths = [System.IO.Directory]::EnumerateFiles($targetPath, "*", [System.IO.SearchOption]::AllDirectories) # 转成PowerShell文件对象方便后续处理 $filePaths | ForEach-Object { Get-Item -LiteralPath $_ }
3. 先验证路径正确性
操作前先输出读取到的路径,确认é没有乱码:
$item.location | Write-Host
如果输出还是�,说明CSV读取的编码没设置对,回到第一步调整编码参数。
内容的提问来源于stack exchange,提问作者Dennis Higgins
相关产品推荐
相关产品推荐

